जवाबों:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
इसके लिए एक HTML हेल्पर बनाने के लिए आपका स्वागत है, लेकिन यह किसी भी अन्य की तरह केवल एक HTML विशेषता है। क्या आप एक टेक्स्ट बॉक्स के लिए एक HTML हेल्पर बनाएंगे जिसमें अन्य विशेषताएँ हों?
@
। आप आमतौर पर इसे केवल HTML विशेषताओं से मेल खाने वाले कीवर्ड (जैसे कि आसानी से, कक्षा, आदि) के साथ देख सकते हैं
@
मेल खाने वाली विशेषताओं का उपयोग करने की आवश्यकता है
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
अद्यतन: अब डिफ़ॉल्ट संपादक टेम्प्लेट में HTML विशेषताओं को जोड़ना बहुत आसान है। ऐसा करने के बजाय यह अच्छा है:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
आप बस यह कर सकते हैं:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
लाभ: आप .TextBoxFor
टेम्प्लेट आदि के लिए कॉल नहीं कर सकते हैं । बस बुलाओ .EditorFor
।
जबकि @ शार्क का समाधान सही तरीके से काम करता है, और यह सरल और उपयोगी है, मेरा समाधान (जो मैं हमेशा उपयोग करता हूं) यह एक है: एक बनाएं जो विशेषता editor-template
को संभाल सकता हैreadonly
:
EditorTemplates
में नामक एक फ़ोल्डर बनाएँ~/Views/Shared/
PartialView
नाम का रेजर बनाएंString.cshtml
String.cshtml
इस कोड को भरें :
@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" })
}
मॉडल वर्ग में, उन [ReadOnly(true)]
गुणों पर विशेषता डालें, जो आप बनना चाहते हैं readonly
।
उदाहरण के लिए,
public class Model {
// [your-annotations-here]
public string EditablePropertyExample { get; set; }
// [your-annotations-here]
[ReadOnly(true)]
public string ReadOnlyPropertyExample { get; set; }
}
अब आप रेजर के डिफ़ॉल्ट सिंटैक्स का उपयोग कर सकते हैं:
@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)
पहले एक text-box
इस तरह एक सामान्य प्रदान करता है :
<input class="text-box single-line" id="field-id" name="field-name" />
और दूसरा करने के लिए प्रस्तुत करना होगा;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
आप डेटा के किसी भी प्रकार के लिए इस समाधान का उपयोग कर सकते हैं ( DateTime
, DateTimeOffset
, DataType.Text
, DataType.MultilineText
और इतने पर)। बस एक बनाएँ editor-template
।
TextBoxFor के साथ समाधान ठीक है, लेकिन अगर आप EditBox स्टाइलिश जैसे क्षेत्र को नहीं देखना चाहते हैं (यह उपयोगकर्ता के लिए थोड़ा भ्रमित हो सकता है) में निम्नानुसार परिवर्तन शामिल हैं:
बदलाव से पहले रेजर कोड
<div class="editor-field">
@Html.EditorFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
बदलाव के बाद
<!-- 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>
आम तौर पर, यह समाधान फ़ील्ड को संपादन से रोकता है, लेकिन इसका मूल्य दिखाता है। कोड-पीछे संशोधनों की कोई आवश्यकता नहीं है।
@Bronek और @ शमी द्वारा पिछले उत्तर के लिए क्रेडिट के साथ:
यह ऐसा ही है जैसे मैंने ASP.NET Core में यही काम किया है:
<input asp-for="DisabledField" disabled="disabled" />
<input asp-for="DisabledField" class="hidden" />
पहला इनपुट पठनीय है और दूसरा नियंत्रक को मान देता है और छिपाया जाता है। मुझे उम्मीद है कि यह ASP.NET कोर के साथ काम करने वाले किसी व्यक्ति के लिए उपयोगी होगा।
@Html.TextBox("Receivers", Model, new { @class = "form-control", style = "width: 300px", @readonly = "readonly" })
@Html.TextBoxFor(model => model.IsActive, new { readonly= "readonly" })
यह टेक्स्ट बॉक्स के लिए ठीक है। हालाँकि, यदि आप इसका checkbox
उपयोग करने की कोशिश करते हैं तो यदि आप इसका उपयोग कर रहे हैं, तो इसका उपयोग करें:
@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" })
लेकिन उपयोग न करें disable
, क्योंकि अक्षम false
सर्वर पर हमेशा डिफ़ॉल्ट मान भेजता है - या तो यह जाँच या अनियंत्रित स्थिति में था। और readonly
चेकबॉक्स और के लिए काम नहीं करता है radio button
। readonly
केवल text
खेतों के लिए काम करता है ।
आप टेक्स्टबॉक्स बनाने के लिए नीचे दिए गए कोड का उपयोग केवल पढ़ने के लिए कर सकते हैं।
विधि 1
@Html.TextBoxFor(model => model.Fields[i].TheField, new { @readonly = true })
विधि 2
@Html.TextBoxFor(model => model.Fields[i].TheField, new { htmlAttributes = new {disabled = "disabled"}})
@
का उपसर्ग याद आ रहा थाreadonly
। मेरा संपादन देखें।