आप एक कस्टम मेटाडाटा प्रदाता लिख सकते हैं और ShowForEdit
मेटाडेटा संपत्ति सेट कर सकते हैं।
public class ShowForEditAttribute : Attribute
{
public ShowForEditAttribute(bool show)
{
Show = show;
}
public bool Show { get; private set; }
}
तो कस्टम मॉडल मेटाडाटा प्रदाता:
public class MyModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(
IEnumerable<Attribute> attributes,
Type containerType,
Func<object> modelAccessor,
Type modelType,
string propertyName
)
{
var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
var sfea = attributes.OfType<ShowForEditAttribute>().FirstOrDefault();
if (sfea != null)
{
metadata.ShowForEdit = sfea.Show;
}
return metadata;
}
}
तो इस प्रदाता Application_Start
में रजिस्टर:
ModelMetadataProviders.Current = new MyModelMetadataProvider();
और अंत में सजाने: तो कस्टम विशेषता के साथ शुरू
public class MyViewModel
{
[ShowForEdit(false)]
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
अब आप अपने ध्यान में रखते हुए यदि आपके पास:
@model MyViewModel
<h2>Editor</h2>
@Html.EditorForModel()
<h2>Display</h2>
@Html.DisplayForModel()
Prop1
संपत्ति संपादक टेम्पलेट में शामिल नहीं किया जाएगा।
टिप्पणी: आप ShowForDisplay
मेटाडेटा संपत्ति के साथ ऐसा ही कर सकते हैं।
स्रोत
2011-04-07 15:24:51
शानदार सुरुचिपूर्ण :) मैं इस बाहर पहली बात कल की कोशिश कर रहा हो जाएगा सुबह। –