Jak utworzyć pole tekstowe tylko do odczytu w ASP.NET MVC3 za pomocą aparatu widoku Razor?
Czy jest do tego dostępna metoda HTMLHelper?
Coś takiego jak poniżej?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
Jak utworzyć pole tekstowe tylko do odczytu w ASP.NET MVC3 za pomocą aparatu widoku Razor?
Czy jest do tego dostępna metoda HTMLHelper?
Coś takiego jak poniżej?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Zapraszamy do stworzenia pomocnika HTML do tego, ale jest to po prostu atrybut HTML, jak każdy inny. Czy stworzyłbyś pomocnika HTML dla pola tekstowego, które ma inne atrybuty?
@
przedrostkareadonly
właściwości. Zobacz moją edycję.@
. Zwykle zobaczysz go tylko ze słowami kluczowymi pasującymi do atrybutów HTML (takich jak tylko do odczytu, klasa itp.)@
atrybutów, które pasują do słów kluczowych C # .@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
AKTUALIZACJA: Teraz bardzo łatwo jest dodać atrybuty HTML do domyślnych szablonów edytora. Neans zamiast robić to:
po prostu możesz to zrobić:
Korzyści: nie musisz dzwonić
.TextBoxFor
itp. Po szablony. Po prostu zadzwoń.EditorFor
.Chociaż rozwiązanie @ Shark działa poprawnie i jest proste i przydatne, moim rozwiązaniem (którego używam zawsze) jest to: Utwórz atrybut,
editor-template
który może obsługiwaćreadonly
atrybut :EditorTemplates
w~/Views/Shared/
PartialView
o nazwieString.cshtml
Wypełnij
String.cshtml
ten kod:W klasie modelu umieść
[ReadOnly(true)]
atrybut na właściwościach, którymi chcesz byćreadonly
.Na przykład,
Teraz możesz po prostu użyć domyślnej składni Razor:
Pierwsza renderuje normalność w
text-box
ten sposób:A drugi odda;
Można korzystać z tego rozwiązania dla każdego rodzaju danych (
DateTime
,DateTimeOffset
,DataType.Text
,DataType.MultilineText
i tak dalej). Po prostu utwórz plikeditor-template
.źródło
Rozwiązanie z TextBoxFor jest w porządku, ale jeśli nie chcesz widzieć pola takiego jak EditBox stylowy (może to być trochę mylące dla użytkownika), wprowadź następujące zmiany:
Kod Razor przed zmianami
Po zmianach
Generalnie to rozwiązanie uniemożliwia edycję pola, ale pokazuje jego wartość. Nie ma potrzeby wprowadzania modyfikacji związanych z kodem.
źródło
Z napisami do poprzedniej odpowiedzi autorstwa @Bronek i @Shimmy:
To jest tak, jakbym zrobił to samo w ASP.NET Core:
Pierwsze wejście jest tylko do odczytu, a drugie przekazuje wartość do sterownika i jest ukryte. Mam nadzieję, że przyda się komuś pracującemu z ASP.NET Core.
źródło
źródło
To jest dobre dla pola tekstowego. Jeśli jednak spróbujesz zrobić to samo dla,
checkbox
spróbuj użyć tego, jeśli go używasz:Ale nie używaj
disable
, ponieważ disable zawsze wysyła wartość domyślnąfalse
do serwera - albo był w stanie zaznaczonym, albo niezaznaczonym. Areadonly
nie działa w przypadku pola wyboru iradio button
.readonly
działa tylko dlatext
pól.źródło
Możesz użyć poniższego kodu do utworzenia TextBox jako tylko do odczytu.
Metoda 1
Metoda 2
źródło