2017-05-14 5 views
0

I 5.Razor Attribute auf Textfeld vs Passwort Feld

Textfeld (beachten Sie die Htmlattributes) ASP.NET MVC bin mit:

@Html.EditorFor(model => model.EmailAddr, 
    new { htmlAttributes = new { @class = "form-control" } }) 

Passwort Field (Hinweis Mangel an Htmlattributes) :

@Html.PasswordFor(model => model.Passwd, new {@class = "form-control"}) 

Dies ist die einzige Art, wie ich es Arbeit machen kann.

Auf dem Textfeld, wenn ich die htmlAttributes wegnehmen, funktioniert es nicht.

Im Feld Passwort, wenn ich htmlAttributes hinzufügen, funktioniert es nicht.

Warum ???

+2

Sie nicht 5.1 in 'htmlAttributes' zu' EditorFor() 'vor MVC passieren können, aber Sie können ein eigenes Template schreiben oder verwenden Sie' TextBoxFor' statt. –

+1

HTML-Helfer sind statische Klassen mit statischen Methoden, und wie bei jedem Aufruf einer statischen Methode müssen Sie die richtigen Argumente angeben. Ich denke, dass Sie "null" statt "neue htmlAttributes" hinzufügen können, wenn Sie sie nicht möchten. Wenn Sie wirklich die html-Attribute in PasswordFor benötigen, denken Sie daran, benutzerdefinierte HTML-Helfer zu schreiben. –

Antwort

2

Es scheint mir, dass der Unterschied in diesen Methoden Signaturen liegt. PasswordFor hat die folgende Signatur:

MvcHtmlString Html.PasswordFor(Expression<Func<dynamic,TProperty>> expression, object htmlAttributes)

wo das zweite Argument, ein Objekt, das htmlAttributes repräsentiert ist. In diesem Fall erstellen Sie einfach dieses htmlAttributes-Objekt mithilfe der Konstruktorsyntax und übergeben es als Parameter.

Jedoch ist EditorFor etwas anders:

EditorExtensions.EditorFor<TModel, TValue> Method (HtmlHelper<TModel>, Expression<Func<TModel, TValue>>, Object)

wo das zweite Argument ist ein Objekt, das additionalViewData enthält. Soweit ich weiß, kann htmlAttributes eine Eigenschaft dieses Objekts sein. In diesem Fall verwenden Sie die Objektinitialisierersyntax für die Objekterstellung, wobei Sie die Eigenschaft htmlAttributes mit dem Wert new { @class = "form-control" } festlegen.

1

PasswordFor:

Die Html.PasswordFor() Verfahren erzeugen ein Eingabepasswort-Element mit angegebenen Namen, den Wert und HTML-Attributen. Signatur Beispiel:

public static MvcHtmlString PasswordFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes); 

EditorFor:

Dieses Steuerbit smart ist. Es rendert HTML-Markup basierend auf dem Datentyp der Eigenschaft. Sie können ein anonymes Objekt übergeben, dessen Eigenschaften irgendwie als Attribute für einige Tags hinzugefügt werden, insbesondere für die integrierten Editor-Vorlagen. Sie müssten Ihre eigene benutzerdefinierte Editorvorlage schreiben und den gewünschten Wert als zusätzliche viewdata übergeben.

Signatur Beispiel:

public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object additionalViewData);