mattytommo के जवाब पर के बाद, इस महान काम करता है लेकिन वहाँ केवल एक छोटा सा समस्या है जब इस तरह के आप एक EditorTemplate अंदर एक संपत्ति के लिए इस कोड का उपयोग कर रहे हैं के रूप में जटिल वस्तुओं, के साथ प्रयोग किया है।
इसके बजाय
var data = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
string propertyName = data.PropertyName;
MVC4 का उपयोग कर के, आप इसे
var propertyName = helper.NameFor(expression);
करने के लिए या MVC3 के लिए और नीचे बदल सकते हैं
var propertyName = expression.Body.ToString();
propertyName = propertyName.Substring(propertyName.IndexOf(".") + 1);
if (!string.IsNullOrEmpty(helper.ViewData.TemplateInfo.HtmlFieldPrefix))
propertyName = string.Format("{0}.{1}", helper.ViewData.TemplateInfo.HtmlFieldPrefix, propertyName);
पूर्ण कोड:
public static MvcHtmlString MyHelperFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, object htmlAttributes = null)
{
var propertyName = expression.Body.ToString();
propertyName = propertyName.Substring(propertyName.IndexOf(".") + 1);
if (!string.IsNullOrEmpty(helper.ViewData.TemplateInfo.HtmlFieldPrefix))
propertyName = string.Format("{0}.{1}", helper.ViewData.TemplateInfo.HtmlFieldPrefix, propertyName);
TagBuilder span = new TagBuilder("span");
span.Attributes.Add("name", propertyName);
span.Attributes.Add("data-something", propertyName);
if (htmlAttributes != null)
{
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
span.MergeAttributes(attributes);
}
return new MvcHtmlString(span.ToString());
}
मदद की है यह नामस्थान * System.Web.Mvc.Html * के तहत एक स्थिर वर्ग के अंदर जोड़ा जाना चाहिए। – BornToCode
@ बोर्नटोकोड आप जानते हैं, मैं उनके द्वारा संदर्भित प्रकार के नामस्थान के तहत लिखे गए एक्सटेंशन को अधिक पसंद करता हूं, अन्यथा अन्य डेवलपर्स कभी भी उनका उपयोग नहीं करते हैं, अगर वे उन्हें नहीं जानते हैं क्योंकि उन्हें उनके बारे में और नामस्थान के बारे में जानना होगा एक संदर्भ जोड़ने और इसका उपयोग करने के लिए रहते हैं। – mattytommo
प्रश्न डेटा-कुछ = "मेलआईडी" के लिए पूछा गया जहां आपका इसे "कुछ" पर सेट करता है।उदाहरण को यह दिखाने की ज़रूरत है कि अभिव्यक्ति के मूल्य को कैसे प्राप्त किया जाए, न केवल संपत्ति का नाम। – xr280xr