Pon este código en alguna parte:
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);
}
}
}
A continuación, en su opinión ASPX:
<label for="<%= Html.FieldIdFor(m => m.EmailAddress) %>">E-mail address:</label>
<%= Html.TextBoxFor(m => m.EmailAddress) %>
También puede utilizar esto en JavaScript llamadas como no sabrá la ID del control por adelantado y puede necesitarlo para que algún código JavaScript trabaje en su contra:
<script> $.CoolJQueryFunction('<%= Html.FieldIdFor(m => m.EmailAddress) %>'); </script>
El método de ayuda HTML LabelFor, que alguien mencionado aquí, no le permitirá especificar la etiqueta de texto real que desea utilizar, tiene que decorar sus ViewModels con atributos para establecer el texto de la etiqueta, con mi humilde opinión. Prefiero que esas cosas aparezcan en la parte de la vista de ASPX propiamente dicha, no en algún modelo de dominio/vista. Sin embargo, algunas personas estarán en desacuerdo conmigo.
No está seguro de las reglas para publicar enlaces a uno de las entradas del blog, pero he publicado un blog sobre este tema exacto: http://www.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2
Lo sé, pero algunas personas no pueden entender correctamente (¡mi inglés no está muy bien)! Eso es todo lo que necesito ... ¡Muchas gracias, hombre! Decorar clases de modelo de dominio con atributos no es una buena práctica para mí, ¡estoy de acuerdo contigo! –
Esto debería ser parte del marco. – pbz
No * bastante * funciona dentro de los controles del usuario (es decir, .ascx) –