Jak stworzyć plik tekstowy w ASP.NET MVC3 tylko z przeglądarką Razor? Czy jest dostępna metoda HTMLHelper?Jak utworzyć readonly textbox w ASP.NET MVC3 Razor
Coś takiego?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
Jak stworzyć plik tekstowy w ASP.NET MVC3 tylko z przeglądarką Razor? Czy jest dostępna metoda HTMLHelper?Jak utworzyć readonly textbox w ASP.NET MVC3 Razor
Coś takiego?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Zapraszamy dokonać Helper HTML dla tego, ale to jest po prostu tylko atrybut HTML jak każda inna. Czy zrobiłbyś HTML Pomocnik dla pola tekstowego, który ma inne atrybuty?
AKTUALIZACJA: Teraz bardzo łatwo jest dodać atrybuty html do domyślnych szablonów edytora. Oznacza zamiast robić to:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
po prostu może to zrobić:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
Korzyści: masz nie dzwonić .TextBoxFor
itp szablonów. Wystarczy zadzwonić pod numer .EditorFor
.
Podczas @ rozwiązanie rekina działa poprawnie i to jest proste i użyteczne, moje rozwiązanie (które używam zawsze) jest to jeden Załóż editor-template
które mogą uchwyty readonly
atrybutów:
EditorTemplates
w ~/Views/Shared/
PartialView
nazwie String.cshtml
Napełnić String.cshtml
z tym kodem:
@if(ViewData.ModelMetadata.IsReadOnly) {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line readonly", @readonly = "readonly", disabled = "disabled" })
} else {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line" })
}
W klasie modelu, umieścić atrybut [ReadOnly(true)]
na właściwości, które chcesz mieć readonly
.
np.
public class Model {
// [your-annotations-here]
public string EditablePropertyExample { get; set; }
// [your-annotations-here]
[ReadOnly(true)]
public string ReadOnlyPropertyExample { get; set; }
}
Teraz można użyć domyślnego składni noża prosto:
@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)
pierwsza, świadczy normalne text-box
takiego:
<input class="text-box single-line" id="field-id" name="field-name" />
i drugi, odda;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
Można użyć tego rozwiązania dla każdego rodzaju danych (DateTime
, DateTimeOffset
, DataType.Text
, DataType.MultilineText
i tak dalej). Po prostu stwórz editor-template
.
+1, ponieważ użyłeś "ViewData.ModelMetadata.IsReadOnly". Spodziewałem się, że MVC weźmie pod uwagę te rzeczy w wersji 4. – cleftheris
@cleftheris dobrze jesteśmy teraz w wersji 5, a MVC nadal ich nie brało;) –
Bardzo przydatne - dzięki :) – Nildarar
Rozwiązanie z TextBoxFor jest OK, ale jeśli nie chcą zobaczyć pola jak okna edycji stylowy (może to być trochę mylące dla użytkownika) pociągać za sobą zmiany następujące:
1. kodu przed Razor zmienia
<div class="editor-field">
@Html.EditorFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
2. Po zmian
<!-- new div display-field (after div editor-label) -->
<div class="display-field">
@Html.DisplayFor(model => model.Text)
</div>
<div class="editor-field">
<!-- change to HiddenFor in existing div editor-field -->
@Html.HiddenFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
Zasadniczo to rozwiązanie wyłącza się przed edycją, ale pokazuje jej wartość. Nie ma potrzeby wprowadzania zmian kodu.
Myślę, że posiadanie CSS dla klasy editor-field i display-field może być bardzo pomocne. – DOK
z kredytów do poprzedniego Odpowiedź @Bronek i @Shimmy
to zrobiłem z samething w ASP.NET Rdzenia
<input asp-for="DisabledField" disabled="disabled" />
<input asp-for="DisabledField" class="hidden" />
Pierwsze wejście jest tylko do odczytu, a druga przechodzi wartość do kontrolera i jest ukryty. Jest to przydatne dla kogoś, kto pracuje z rdzeniem ASP.Net.
@Html.TextBox("Recivers", Model, new { @class = "form-control", style = "width: 300px", @readonly = "readonly" })
@Html.TextBoxFor(model => model.IsActive, new { readonly= "readonly" })
To dobrze dla pola tekstowego. Jednakże, jeśli starają się zrobić to samo dla checkbox
następnie spróbuj użyć tego, jeśli go używać
@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" })
Ale nie używać disable
ponieważ wyłączenie zawsze wysłać domyślną wartość false do serwera albo został w zaznaczone lub odznaczone stan. I readonly
nie działa dla checkbox i radio button
. readonly
działa tylko dla pól text
.
@Shyju Niestety, brakowało przedrostka '@ 'właściwości' readonly'. Zobacz moją edycję. –
W przyszłości, jeśli pojawi się jakikolwiek błąd dodający właściwości do argumentu obiektu dynamicznego, możesz poprzedzić je znakiem '@'. Zazwyczaj będzie to widoczne tylko dla słów kluczowych pasujących do atrybutów HTML (takich jak readonly, klasa itp.). –
@BradChristie: Nie; potrzebujesz tylko '@' do używania atrybutów pasujących do ** C# ** słów kluczowych. – SLaks