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-template
readonly
çözüm oluşturun :
EditorTemplates
içinde~/Views/Shared/
PartialView
Adlı bir jilet oluşturunString.cshtml
String.cshtml
Bu 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.MultilineText
vb). 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 false
sunucuya gönderir - ya işaretli ya da işaretlenmemiş durumdaydı. Ve readonly
onay kutusu için çalışmaz ve radio button
. readonly
yalnızca text
alanlar 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.