Ответ 1
Поместите этот код где-нибудь:
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 атрибутами, чтобы установить текст ярлыка, при этом IMHO является уродливым. Я предпочел бы, чтобы материал отображался в самой части представления ASPX, а не на некоторой модели домена/вида. Некоторые люди не согласятся со мной, хотя.
Не уверен в правилах размещения ссылок на сообщения одного блога, но я разместил блог по этой точной теме: http://www.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2 p >