2016-05-05 11 views
0

Es wird versucht, ein deaktiviertes Textfeld zu erstellen, wenn das Attribut [Editable(false)] für eine Eigenschaft im Modell vorhanden ist.Zugreifen auf die Modellattribute in einer Helper-Erweiterungsklasse

public static IHtmlString SmartTextBox(this HtmlHelper helper, string content) 
{ 
    string htmlString = String.Format("<input type="text">{0}</input>", content); 
    return new HtmlString(htmlString); 
} 

Modell:

public class User 
{   
    public int Age { get; set; } 

    [Editable(false)] 
    public string Name { get; set; } 
} 

Gibt es trotzdem das Modell hier zu überprüfen und dann auf das Eingangselement das disabled-Attribut hinzufügen, wenn er deaktiviert wurde?

+1

Wo ist "das Modell"? –

+0

@SamIam aktualisiert die Frage – Prabhu

+0

Mögliche Duplikate von [Reflection - get Attributname und Wert auf Eigenschaft] (http://stackoverflow.com/questions/6637679/reflection-get-attribute-name-and-value-on-property) –

Antwort

1

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); 
    } 
} 
Verwandte Themen