2017-04-09 7 views
0

In meiner MVC Application-Ansicht habe ich @Html.TextBoxFor(m => m.Email, new { @class = "form-control", @readonly = "readonly" })ASP.NET MVC 5 Wie entfernen oder hinzufügen Attribut in Html.TextBoxFor

Ich brauche das Nur-Lese-Attribut zu entfernen, wenn eine if-Anweisung in meinem Controller auftritt. Wie kann ich vom Controller das Attribut in der Ansicht entfernen oder das Attribut hinzufügen, wenn ich es zuerst aus der Ansicht entferne und dann meine if-Anweisung ändere?

Antwort

2

Ich verstehe, dass Sie das readonly Attribut zu einer Textbox bedingt hinzufügen möchten.

können Sie ViewData dafür verwenden, von dem Controller ViewData["IsEmailReadOnly"] in einen Booleschen Wert

if(MyCondition()) 
    ViewData["IsEmailReadOnly"] = true; 
else 
    ViewData["IsEmailReadOnly"] = false; 

zuweisen und dann in Ihrer Ansicht:

@{ 
    object textBoxAttrs; 
    if((bool) ViewData["IsEmailReadOnly"]) { 
     textBoxAttrs = new { @class = "form-control", @readonly = "readonly" }; 
    } 
    else 
    { 
     textBoxAttrs = new { @class = "form-control" }; 
    } 
} 

@Html.TextBoxFor(m => m.Email, textBoxAttrs) 
+0

Dank für die Beantwortung! Ich bekomme die "Property oder Indexer 'ViewDataDictionary.Is schreibgeschützt' kann nicht zugewiesen werden - es ist schreibgeschützt. – JayPi

+0

Es tut mir leid, ändern Sie den Namen der Eigenschaft,' IsReadOnly' könnte bereits in 'ViewDataDictionary' implementiert werden. Ich aktualisiere die Antwort. –

+0

Nicht sicher, ob ich verstehe, wie ViewData funktioniert, aber ich bekomme die Nachricht: 'ViewDataDictionary' enthält keine Definition für 'IsEmailReadOnly' und keine Erweiterungsmethode 'IsEmailReadOnly' akzeptiert ein erstes Argument vom Typ ' ViewDataDictionary 'könnte gefunden werden (fehlt eine using-Direktive oder eine Assembly-Referenz?) – JayPi

Verwandte Themen