2017-07-07 1 views
0

Wenn Sie ASP.NET MVC verwenden, muss der folgende Code Ihnen vertraut sein:Wie wiederhole ich keinen Rasierklingen-Code in einer ASP.NET MVC- "Bearbeitungs" -Ansicht für jede Modelleigenschaft?

<div class="row"> 
    <div class="form-sm-4"> 
     @Html.LabelFor(m => m.att) 
    </div> 
    <div class="form-sm-8"> 
     @Html.EditorFor(m => m.att, new { htmlAttributes = new { @class = "form-control" } }) 
     @Html.ValidationMessageFor(m => m.att) 
    </div> 
</div> 

Dies ist eine grundlegende Eingangsgruppe mit der Bezeichnung, Ein- und Validierungsnachricht eingestellt.

Heute bin ich konfrontiert mit einer POCO-Klasse mit Dutzenden von Attributen. Ich meine, es hat N Anzahl von Eigenschaften in der Modellklasse. Um ein HTML zu erstellen, muss er das obige Code-Snippet N mal wiederholen. Wenn es Änderungen im DOM gibt, muss er alle CSS-Klassen oder sogar bestimmte HTML manuell ändern.

Ich bin auf der Suche nach einer Lösung, in der er nicht oben Code-Snippet für Dutzende von Modell-Eigenschaften wiederholen muss.

+0

Die Frage ist unklar. Bitte geben Sie ein Muster der Modellklasse an. – stomtech

+0

Bitte erklären Sie, was Sie meinen, indem Sie Dutzende von Attributen ändern? Sie meinen htmlAttributes oder eine Eigenschaft im Objekt? – stomtech

+1

Ich denke, OP bedeutet, er hat ** N ** Anzahl von Eigenschaften in der Modellklasse. Um ein HTML zu erstellen, muss er das obige Code-Snippet ** N ** mal wiederholen. Wenn es Änderungen im DOM gibt, muss er alle CSS-Klassen oder sogar bestimmte HTML manuell ändern. Er sucht nach einer Lösung, bei der er nicht für Dutzende von Modelleigenschaften über den Code-Ausschnitt hinausgehen muss. – Prabhat

Antwort

1

Klassen erstellen:

public static class PropertyExtensions 
{ 
    public static ModelWrapper<T> Wrap<T>(this T property, string propertyName) 
    { 
     var genericType = typeof(ModelWrapper<>); 
     var specificType = genericType.MakeGenericType(typeof(T)); 

     var wrappedPropertyModel = (ModelWrapper<T>)Activator.CreateInstance(specificType); 

     wrappedPropertyModel.ModelProperty = property; 
     wrappedPropertyModel.PropertyName = propertyName; 

     return wrappedPropertyModel; 
    } 
} 

public class ModelWrapper<T> 
{ 
    public string PropertyName { get; set; } 
    public T ModelProperty { get; set; } 
} 

erstellen Teilansicht:

@model ModelWrapper<object> 

<div class="row"> 
    <div class="form-sm-4"> 
     @Html.Label(Model.PropertyName) 
    </div> 
    <div class="form-sm-8"> 
     @Html.EditorFor(m => m.ModelProperty, new { htmlAttributes = new { @class = "form-control" } }) 
     @Html.ValidationMessageFor(m => m.ModelProperty) 
    </div> 
</div> 

in der Hauptansicht:

@Html.Partial("_PartialViewName", ((object)Model.YourVariableProperty).Wrap("YourVariableProperty")) 
Verwandte Themen