Setzen Sie diesen Code irgendwo:
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);
}
}
}
Dann in Ihrer ASPX Ansicht:
<label for="<%= Html.FieldIdFor(m => m.EmailAddress) %>">E-mail address:</label>
<%= Html.TextBoxFor(m => m.EmailAddress) %>
Sie auch diese in JavaScript als Anrufe verwenden können Sie werden die ID des Steuerelements nicht im Voraus kennen und benötigen möglicherweise JavaScript-Code, um dagegen zu arbeiten:
<script> $.CoolJQueryFunction('<%= Html.FieldIdFor(m => m.EmailAddress) %>'); </script>
Die LabelFor HTML-Hilfsmethode, die hier erwähnt wird, lässt Sie nicht die tatsächliche Textbezeichnung angeben, die Sie verwenden möchten, Sie müssen Ihre ViewModels mit Attributen dekorieren, um den Beschriftungstext zu setzen, mit IMHO ist hässlich. Ich würde eher, dass diese Sachen in der tatsächlichen ASPX-View-Teil selbst erscheinen, nicht auf einigen Domain/View-Modell. Manche Leute werden mir nicht zustimmen.
Nicht sicher der Regeln für die Links zu einem Blog-Beiträge zu veröffentlichen, aber ich schrieb einen Blog auf genau diesem Thema: http://www.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2
Ich weiß, aber manche Leute können nicht richtig verstehen (mein Englisch ist nicht sehr gut)! Das ist alles was ich brauche ... Danke vielmals! Decorate Domain Model Klassen mit Attributen ist keine gute Übung für mich, ich stimme dir zu! –
Dies sollte Teil des Frameworks sein. – pbz
Funktioniert nicht ganz innerhalb von Benutzersteuerelementen (d. H. .ascx) –