Ich habe diese Zeile Code:Wie mache ich EditorFor bedingt schreibgeschützt?
@Html.EditorFor(model => model.Quantity, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
Ich habe eine Variable aus meiner Sicht Data Dictionary Read-Only genannt. Wie mache ich die Menge schreibgeschützt, wenn ViewBag.Readonly
wahr ist und nicht nur gelesen wird, wenn sie falsch ist?
Einfache Sache, aber die Kombination von Razor mit HTML (die alt ist) macht sonst einfache Dinge unmöglich.
Edits:
Ich will nicht eine if-Anweisung verwenden. Das ist ein letzter Ausweg, weil es gegen DRY verstößt, wo ich in der Vergangenheit schon mehrmals schwer verbrannt wurde, weil ich nicht gefolgt bin.
Die Zeile, die ich oben habe, funktioniert insofern, als sie das Textfeld schreibgeschützt macht. Ich muss dies abhängig von meinem Ansichtszustand machen.
Lösung:
ich folgendes benutzt habe. Es ist immer noch eine DRY-Verletzung, aber es reduziert es auf eine Zeile.
@Html.EditorFor(model => model.Quantity, new { htmlAttributes = ViewBag.Readonly ? (object)new { @class = "form-control", @readonly = "htmlsucks" } : (object)new { @class = "form-control" } })
Schön. Ich sehe, wie Sie die DRY-Verletzung minimiert haben. Ich respektiere das. Ich habe die Dinge ein wenig geändert, aber ich denke, ich werde das verwenden. Ich hoffe immer noch auf bessere Optionen, aber das funktioniert jetzt. – Jordan
Dies ist die beste Antwort –
das Problem ist, wenn Sie eine große Menge von 'htmlAttributes' haben, müssen Sie alle anderen *** wiederholen, nur um die readonly *** ??? Und es ist noch schlimmer, wenn Sie andere Attribute (ähnlich wie nur gelesen) haben, um unabhängig voneinander zu wechseln, wie zum Beispiel "deaktiviert", "erforderlich", ... Nehmen Sie an, die Anzahl solcher Attribute ist "n", Sie brauchen "2^n Ausdrücke mit *** duplizierten Einstellungen *** für andere Attribute. Das ist ein schreckliches Design. Das beste Design in diesem Fall ist, wenn die Eigenschaft auf 'null' gesetzt ist, ignorieren Sie einfach das Rendering. ASP.NET MVC benötigt noch mehr Verbesserung. –