Я - begginer в asp.net mvc, и у меня есть сомнение:
Я пытаюсь сделать маркировку для TextBox, по моему мнению, и я хотел бы знать, как может я брать идентификатор, который будет рендерингом в клиенте для генерирования сценариев..., например:
<label for="<%=x.Name.ClientId%>"> Name: </label>
<%=Html.TextBoxFor(x=>x.Name) %>
Чему нужно, я вставил "ClientId", чтобы удостовериться, что корректный идентификатор будет рендерингом к соответствующему управлению?
Спасибо
Удачи
Поместите этот код где-нибудь:
using System;
using System.Linq.Expressions;
using System.Web.Mvc;
namespace MvcLibrary.Extensions
{
public static class HtmlExtensions
{
public static MvcHtmlString FieldIdFor<TModel, TValue>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression)
{
string htmlFieldName = ExpressionHelper.GetExpressionText(expression);
string inputFieldId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName);
return MvcHtmlString.Create(inputFieldId);
}
}
}
Затем в вашем представлении ASPX:
<label for="<%= Html.FieldIdFor(m => m.EmailAddress) %>">E-mail address:</label>
<%= Html.TextBoxFor(m => m.EmailAddress) %>
Вы также можете использовать это в вызовах JavaScript, так как вы не знаете идентификатор элемента управления заранее и он может понадобиться чтобы какой-то код JavaScript работал против него:
<script> $.CoolJQueryFunction('<%= Html.FieldIdFor(m => m.EmailAddress) %>'); </script>
Вспомогательный метод LabelFor HTML, упомянутый здесь, не позволит вам указать фактическую текстовую метку, которую вы хотите использовать, вы должны украсить свои ViewModels атрибутами, чтобы установить метку текст, причем ИМХО некрасивый. Я бы предпочел, чтобы этот материал появлялся в самой части представления ASPX, а не в какой-либо модели домена / представления. Однако некоторые люди не согласятся со мной.
Не уверен в правилах размещения ссылок на сообщения в блогах, но я опубликовал блог именно по этой теме: http://www.dominicpettifer.co.uk/Blog/37/strongly-typed-- label - elements-in-asp-net-mvc-2
Используйте следующее:
Model.Name
Вы можете просто выполнить «просмотр исходного кода» или изучить визуализированное текстовое поле с помощью чего-то вроде Firebug, чтобы увидеть, что генерируют методы Html.xyzFor ()
. Обычно они генерируют текстовое поле с атрибутами «id» и «name», установленными для имени свойства.
Как уже было сказано, вам не нужно беспокоиться о ClientID, UniqueID и т.д. в ASP.NET MVC, поскольку это абстракции веб-формы. Вы можете просто записать нужный вам ID. Для этого есть метод расширения:
<%= Html.LabelFor(x => x.Name) %>