Hier ist ein Helfer, den ich schrieb, der ein '*' zu einem Etikett hinzufügt, wenn die Modelleigenschaft als erforderlich markiert ist. ModelMetaData verfügt über eine IsReadonly-Eigenschaft, die möglicherweise genutzt werden kann. Sie sollten in der Lage sein, die richtigen Ersetzungen vorzunehmen, um die Änderungen für ein Textfeld vorzunehmen.
public static class LabelExtensions
{
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression, IDictionary<String, Object> htmlAttributes,
String requiredMarker = "*")
{
return LabelHelper(html, ModelMetadata.FromLambdaExpression(expression, html.ViewData),
ExpressionHelper.GetExpressionText(expression), null, htmlAttributes, requiredMarker);
}
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression, Object htmlAttributes, String requiredMarker)
{
return LabelFor(html, expression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes), requiredMarker);
}
internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName,
String labelText = null, IDictionary<String, Object> htmlAttributes = null, String requiredMarker = null)
{
var resolvedLabelText = labelText ??
metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
var tag = new TagBuilder("label");
tag.Attributes.Add("for",
TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
tag.SetInnerText(resolvedLabelText);
tag.MergeAttributes(htmlAttributes, true);
if (metadata.IsRequired && !String.IsNullOrWhiteSpace(requiredMarker))
{
var requiredSpan = new TagBuilder("span") {InnerHtml = requiredMarker};
requiredSpan.AddCssClass("required");
tag.InnerHtml += requiredSpan;
}
var result = tag.ToString(TagRenderMode.Normal);
return new MvcHtmlString(result);
}
}
Wo ist "das Modell"? –
@SamIam aktualisiert die Frage – Prabhu
Mögliche Duplikate von [Reflection - get Attributname und Wert auf Eigenschaft] (http://stackoverflow.com/questions/6637679/reflection-get-attribute-name-and-value-on-property) –