Yanıtlar:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Bunun için bir HTML Yardımcısı yapabilirsiniz, ancak bu sadece diğerleri gibi bir HTML özelliğidir. Başka özniteliklere sahip bir metin kutusu için bir HTML Yardımcısı oluşturur muydunuz?
@. Bunu genellikle yalnızca HTML özellikleriyle eşleşen anahtar kelimelerle (salt okunur, sınıf vb.) Görürsünüz
@eşleşen öznitelikleri kullanmanız gerekir .
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
GÜNCELLEME: Varsayılan düzenleyici şablonlarına HTML nitelikleri eklemek artık çok basit. Bunu yapmak yerine neans:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
basitçe bunu yapabilirsiniz:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
Faydaları: .TextBoxForŞablonlar için arama vb. Zorunda değilsiniz . Sadece ara .EditorFor.
@ Shark'ın çözümü doğru çalışmasına ve basit ve kullanışlı olmasına rağmen benim çözümüm (her zaman kullandığım) şudur: Özniteliği işleyebilen bireditor-templatereadonly çözüm oluşturun :
EditorTemplatesiçinde~/Views/Shared/PartialViewAdlı bir jilet oluşturunString.cshtmlString.cshtmlBu kodu doldurun :
@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" })
}Model sınıfında, [ReadOnly(true)]özniteliği olmak istediğiniz özelliklere koyun readonly.
Örneğin,
public class Model {
// [your-annotations-here]
public string EditablePropertyExample { get; set; }
// [your-annotations-here]
[ReadOnly(true)]
public string ReadOnlyPropertyExample { get; set; }
}
Artık Razor'un varsayılan sözdizimini basitçe kullanabilirsiniz:
@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)
İlki şu şekilde normaldir text-box:
<input class="text-box single-line" id="field-id" name="field-name" />
Ve ikincisi;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
Sen her veri türü için bu çözümü kullanabilirsiniz ( DateTime, DateTimeOffset, DataType.Text, DataType.MultilineTextvb). Sadece bir editor-template.
TextBoxFor ile çözüm tamam, ancak alanı EditBox şık olarak görmek istemiyorsanız (kullanıcı için biraz kafa karıştırıcı olabilir) aşağıdaki değişiklikleri içerir:
Değişikliklerden önce jilet kodu
<div class="editor-field">
@Html.EditorFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>Değişikliklerden sonra
<!-- 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>Genel olarak, bu çözüm alanın düzenlenmesini engeller ancak değerini gösterir. Arka planda kodlama değişikliklerine gerek yoktur.
@Bronek ve @Shimmy tarafından verilen önceki cevaba kredilerle:
ASP.NET Core'da aynı şeyi yaptığım gibi:
<input asp-for="DisabledField" disabled="disabled" />
<input asp-for="DisabledField" class="hidden" />
İlk giriş salt okunurdur ve ikincisi değeri kontrolöre iletir ve gizlenir. Umarım ASP.NET Core ile çalışan biri için faydalı olur.
@Html.TextBox("Receivers", Model, new { @class = "form-control", style = "width: 300px", @readonly = "readonly" })
@Html.TextBoxFor(model => model.IsActive, new { readonly= "readonly" })
Bu metin kutusu için gayet iyi. Ancak, aynı şeyi yapmaya checkboxçalışırsanız, kullanıyorsanız, bunu kullanmayı deneyin:
@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" })
Ancak kullanmayın disable, çünkü devre dışı bırakma her zaman varsayılan değeri falsesunucuya gönderir - ya işaretli ya da işaretlenmemiş durumdaydı. Ve readonlyonay kutusu için çalışmaz ve radio button. readonlyyalnızca textalanlar için çalışır .
Salt okunur olarak bir TextBox oluşturmak için aşağıdaki kodu kullanabilirsiniz.
Yöntem 1
@Html.TextBoxFor(model => model.Fields[i].TheField, new { @readonly = true })
Yöntem 2
@Html.TextBoxFor(model => model.Fields[i].TheField, new { htmlAttributes = new {disabled = "disabled"}})
@önekini bulamadımreadonly. Düzenlememe bakın.