आज जब ASP.NET MVC 2 में <%=Html.LabelFor(m=>m.MyProperty)%>
के एक जोड़े कर रहे हैं और System.ComponentModel
से [DisplayName("Show this instead of MyProperty")]
विशेषता का उपयोग मैं उलझन में मिल गया।सोच
जैसा कि यह निकला, जब मैंने ओवरराइड संपत्ति पर विशेषता डाली, तो लेबलफ़ोर को यह नोटिस नहीं हुआ।
हालांकि, [Required]
विशेषता ओवरराइड संपत्ति पर ठीक काम करती है, और जेनरेट की गई त्रुटि वास्तव में DisplayNameAttribute का उपयोग करती है।
यह कुछ मामूली उदाहरण कोड है, और यथार्थवादी परिदृश्य यह है कि मेरे पास एक डाटाबेसमोडेल व्यूमोडेल से अलग है, लेकिन सुविधा के लिए, मैं डेटाबेसबेस से प्राप्त करना चाहता हूं, केवल-देखने के गुणों को जोड़ना चाहता हूं और व्यूमोडेल को सजाने के साथ यूआई के लिए विशेषताएं।
public class POCOWithoutDataAnnotations
{
public virtual string PleaseOverrideMe { get; set; }
}
public class EditModel : POCOWithoutDataAnnotations
{
[Required]
[DisplayName("This should be as label for please override me!")]
public override string PleaseOverrideMe
{
get { return base.PleaseOverrideMe; }
set { base.PleaseOverrideMe = value; }
}
[Required]
[DisplayName("This property exists only in EditModel")]
public string NonOverriddenProp { get; set; }
}
दृढ़ता से टाइप किया ViewPage<EditModel>
शामिल हैं:
<div class="editor-label">
<%= Html.LabelFor(model => model.PleaseOverrideMe) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.PleaseOverrideMe) %>
<%= Html.ValidationMessageFor(model => model.PleaseOverrideMe) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.NonOverriddenProp) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.NonOverriddenProp) %>
<%= Html.ValidationMessageFor(model => model.NonOverriddenProp) %>
</div>
लेबल तो के रूप में "PleaseOverrideMe" (नहीं DisplayNameAttribute प्रयोग करके) और प्रदर्शित किए जाते हैं "यह संपत्ति केवल EditModel में मौजूद है" (पृष्ठ को देखते समय DisplayNameAttribute) का उपयोग कर।
अगर मैं खाली मूल्यों के साथ पोस्ट, इस ActionMethod साथ सत्यापन ट्रिगर:
[HttpPost]
public ActionResult Edit(EditModel model)
{
if (!ModelState.IsValid)
return View(model);
return View("Thanks");
}
<%= Html.ValidationMessageFor(model => model.PleaseOverrideMe) %>
वास्तव में उपयोग करता [DisplayName("This should be as label for please override me!")]
विशेषता, और डिफ़ॉल्ट errortext पैदा करता है "यह लेबल के रूप में किया जाना चाहिए के लिए कृपया मुझे ओवरराइड क्षेत्र है! की आवश्यकता है। "
क्या कुछ दोस्ताना आत्मा इस पर कुछ प्रकाश डालती है?
लासे, आप अंतरिम में किसी भी भाग्य पड़ा है? –
यदि आप अपनी सभी संपत्तियों को प्रदर्शित करने के लिए प्रतिबिंब का उपयोग कर रहे हैं तो आपके पास 'ModelMetadata' प्रकार उपलब्ध है। अनिवार्य रूप से आप यह 'HTML.Label (prop.GetDisplayName()) करेंगे। –