2016-06-03 9 views
2

Ich habe den folgenden Code:EditorFor Erweiterung nicht für Htmlattributes in Asp.Net MVC arbeiten 5.1

public static class HtmlExtendedHelpers 
{ 

    public static IHtmlString eSecretaryEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel,TProperty>> ex, object htmlAttributes, bool disabled) 
    { 

     if (disabled) 
     { 
      htmlAttributes.Add(new { @disabled = "disabled" }); //searching for working code as replacement for this line 
     } 

     return htmlHelper.EditorFor(ex, htmlAttributes); 

    } 
} 

Es funktioniert, wenn sie deaktiviert = false und alle meine Alternativen scheitern, wenn ich deaktiviert ist wahr. Dann werden keine der htmlAttributes geschrieben.

Die Variable htmlAttribute hat den Wert (einschließlich Htmlattributes Eigenschaft :)

htmlAttributes: { class = "form-control" } 

Das ist, weil ich eine Standardklasse von Form-Kontrolle haben, und ich will ein Attribut hinzufügen: deaktiviert deaktiviert mit Wert.

Kann jemand das richtig implementieren?

PS. Da Asp.Net MVC 5.1, gibt es Unterstützung für Htmlattributes

Antwort

4

können Sie HtmlHelper.AnonymousObjectToHtmlAttributes

var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 

if (disabled) 
{ 
    attributes.Add("disabled", "disabled"); 
} 

Alternativ verwenden Sie das disabled Attribut als Teil des htmlAttributes Objekt passieren könnte, würden Sie nicht alle if Aussage benötigen Bedeutung.

htmlAttributes: { class = "form-control", disabled = "disabled" } 

Je nachdem, ob Sie eine benutzerdefinierte EditorFor Vorlage haben oder nicht, können Sie zu ändern, wie Sie die HTML-Attribute auf die Funktion EditorFor geben, als Parameter es akzeptiert - additionalViewData ist nicht das gleiche.

This article erläutert ausführlicher.

Wenn Sie eine Standardvorlage verwenden, können Sie die HTML-Attribute in einem anderen anonymen Objekt übergeben:

return htmlHelper.EditorFor(ex, new { htmlAttributes = attributes }); 

Wenn Sie eine eigene Vorlage haben, sehen Sie die HTML-Attribute abrufen müssen und wenden sie sich in die Ansicht:

@{ 
    var htmlAttributes = ViewData["htmlAttributes"] ?? new { }; 
} 
0

Sie können die Attribute in den Htmlattributes passieren wie unten:

htmlAttributes: { class = "form-control", disbaled="disabled" } 

Auch können Sie Ihre Metadaten-Attribut erstellen, die auf Ihrem Grundstück eingerichtet werden können, für die Sie verwenden EditorFor.

Um Ihre eigene Metadaten-Eigenschaft zu erstellen, können Sie die Schnittstelle IMetadataAware implementieren.