Wie erstelle ich ein schreibgeschütztes Textfeld in ASP.NET MVC3 mit der Razor View Engine?
Gibt es dafür eine HTMLHelper-Methode?
So etwas wie das Folgende?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
Wie erstelle ich ein schreibgeschütztes Textfeld in ASP.NET MVC3 mit der Razor View Engine?
Gibt es dafür eine HTMLHelper-Methode?
So etwas wie das Folgende?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Sie können gerne einen HTML-Helfer dafür erstellen, aber dies ist einfach nur ein HTML-Attribut wie jedes andere. Würden Sie einen HTML-Helfer für ein Textfeld mit anderen Attributen erstellen?
@
Präfix derreadonly
Eigenschaft. Siehe meine Bearbeitung.@
. Sie werden es normalerweise nur mit Schlüsselwörtern sehen, die mit HTML-Attributen übereinstimmen (wie schreibgeschützt, Klasse usw.)@
, um Attribute zu verwenden, die mit C # -Schlüsselwörtern übereinstimmen .@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
UPDATE: Jetzt ist es sehr einfach, den Standardeditorvorlagen HTML-Attribute hinzuzufügen. Es bedeutet, anstatt dies zu tun:
Sie können dies einfach tun:
Vorteile: Sie müssen nicht anrufen
.TextBoxFor
usw. für Vorlagen. Rufen Sie einfach an.EditorFor
.Während die Lösung von @ Shark korrekt funktioniert und einfach und nützlich ist, lautet meine Lösung (die ich immer verwende) wie folgt: Erstellen Sie ein Attribut
editor-template
, das mitreadonly
Attributen umgehen kann :EditorTemplates
in~/Views/Shared/
PartialView
NamenString.cshtml
Füllen Sie das
String.cshtml
mit diesem Code:Fügen Sie in der Modellklasse das
[ReadOnly(true)]
Attribut den Eigenschaften hinzu, die Sie sein möchtenreadonly
.Beispielsweise,
Jetzt können Sie die Standardsyntax von Razor einfach verwenden:
Der erste macht eine Normalität
text-box
wie folgt:Und der zweite wird rendern zu;
Sie können diese Lösung für jede Art von Daten (
DateTime
,DateTimeOffset
,DataType.Text
,DataType.MultilineText
und so weiter). Erstellen Sie einfach eineeditor-template
.quelle
Die Lösung mit TextBoxFor ist in Ordnung. Wenn Sie jedoch nicht möchten, dass das Feld wie EditBox stylisch angezeigt wird (dies kann für den Benutzer etwas verwirrend sein), müssen Sie folgende Änderungen vornehmen:
Rasiermessercode vor Änderungen
Nach Änderungen
Im Allgemeinen verhindert diese Lösung, dass Felder bearbeitet werden, zeigt jedoch den Wert an. Code-Behind-Änderungen sind nicht erforderlich.
quelle
Mit Credits zur vorherigen Antwort von @Bronek und @Shimmy:
Dies ist, als hätte ich dasselbe in ASP.NET Core getan:
Der erste Eingang ist schreibgeschützt und der zweite gibt den Wert an die Steuerung weiter und ist ausgeblendet. Ich hoffe, es ist nützlich für jemanden, der mit ASP.NET Core arbeitet.
quelle
quelle
Dies ist in Ordnung für Textfelder. Wenn Sie jedoch versuchen, dasselbe für das zu tun,
checkbox
versuchen Sie dies, wenn Sie es verwenden:Verwenden Sie diese
disable
Option jedoch nicht , da durch Deaktivieren immer der Standardwertfalse
an den Server gesendet wird - entweder im aktivierten oder im nicht aktivierten Status. Und dasreadonly
funktioniert nicht für Checkbox undradio button
.readonly
funktioniert nur fürtext
Felder.quelle
Mit dem folgenden Code können Sie eine TextBox als schreibgeschützt erstellen.
Methode 1
Methode 2
quelle