ich eine Form bin Gebäude, und ich habe zu halten, ein Inline-bedingte mit einem Attribut readonly
html hinzuzufügen:Wie kann ich wiederholende Inline conditionals für die Definition von Htmlattributes Html.EditorFor vermeiden()
@Html.LabelFor(model => model.EventDate)
<div class="row">
<div class="col-xs-3">
@Html.EditorFor(model => model.EventDate, new
{
htmlAttributes = Model.IsEditorReadOnly ?
(object)new { @class = "form-control input-lg", @type = "date", @readonly = "readonly" } :
(object)new { @class = "form-control input-lg", @type = "date" }
})
</div>
</div>
@Html.ValidationMessageFor(model => model.EventDate)
Sie können‘ t Verwenden Sie eine Bedingung nur für den Wert @readonly
der Eigenschaft, denn selbst wenn es auf Null gesetzt ist, wird es für den Client als readonly=""
gerendert werden, und das ist genug für einen Browser, dieses Feld schreibgeschützt zu machen.
Es muss einen besseren Weg geben, dies zu tun als eine Inline-Bedingung für jedes Formularelement, nur um ein einzelnes Attribut hinzuzufügen, richtig?
Sie könnten Sie besitzen Methode Htmlhelper Erweiterung erstellen - sagen '@ Html.ReadOnlyEditorFor (Ausdruck, Htmlattributes, isReadonly = true)', wo das Attribut hinzugefügt wird, je nach dem Wert des 'isReadonly' -Parameter –
@StephenMuecke Wie würde ich das htmlAttributes-Objekt innerhalb dieses Helpers ändern, um die Eigenschaft' @ readonly' hinzuzufügen/zu entfernen? – travis
Siehe [diese Antwort] (http://stackoverflow.com/questions/30127866/create-checkboxfor-mvc-helper-with-title-attribute-from-model-description/30135407#30135407) für ein Beispiel –