Поместите этот код куда-нибудь:
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