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