2010-01-23 14 views
16

मैं सोच रहा था कि एएसपी.नेट एमवीसी 2 में एक कस्टम दृढ़ता से टाइप किया गया HTML हेल्पर बनाना संभव है? नियमित (पढ़ना-दृढ़ता से टाइप किया गया) सहायक बनाना सरल नहीं है लेकिन मुझे दृढ़ता से टाइप किए गए संस्करण बनाने में कठिनाई हो रही है। उदाहरण के लिए, मैं डेटपिकर के लिए एचटीएमएल सहायक बनाना चाहता हूं ...क्या एक कस्टम एएसपी.नेट एमवीसी दृढ़ता से टाइप किया गया HTML सहायक है?

कोई मार्गदर्शन या स्निपेट की सराहना की जाएगी, अग्रिम धन्यवाद! जेपी

उत्तर

14

ठीक है, मैंने इसे समझ लिया (और यह बहुत सरल था ...)। अगर कोई और इस प्रश्न में चलता है तो मेरे ओवरलोड में से एक पोस्ट करना।

public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression) 
    where TModel : class 
{ 
    var inputName = ExpressionHelper.GetExpressionText(expression); 
    return htmlHelper.DatePicker(inputName); 
} 
+2

@JP आप मूल्य कैसे प्राप्त करते हैं? जैसे html.DatePicker (x => x.Date), आप x.Date मान – Omu

1
public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression) 
    where TModel : class 
{ 
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
    return htmlHelper.DatePicker(metadata.PropertyName); 
} 

मैं ModelMetadata इस्तेमाल किया यह भी अगर आप datepicker के लिए एक datetime टेम्पलेट बनाने के लिए काम करेंगे।

+0

कैसे प्राप्त करते हैं यह खाता 'html.DatePickerFor (m => m.User.birthday)' के लिए करता है? (Dereferencing के एकाधिक स्तर?) ऐसा लगता है कि '.PropertyName' सदस्य अभी हालिया नाम वापस कर देगा, और यह सभी स्तरों का उपयोग नहीं करना चाहिए? –

4

मैंने दृढ़ता से टाइप किए गए सीकेएडिटर सहायक बनाने के लिए निम्नलिखित प्रयासों की कोशिश की और ऐसा लगता है कि यह बेकार ढंग से काम कर रहा है। यह मानता है कि आपने पहले से ही अपनी परियोजना में jquery और आवश्यक ckeditor स्क्रिप्ट शामिल की हैं। Ckeditor कॉन्फ़िगरेशन को भी सेट करना भी अच्छा लगेगा, लेकिन यह मेरी वर्तमान आवश्यकताओं को संतुष्ट करता है।

public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value, object htmlAttributes) 
    { 
     var output = htmlHelper.TextArea(name, value, htmlAttributes).ToString(); 
     output += string.Format("<script type=\"text/javascript\">$(document).ready(function(){{ $('#{0}').ckeditor(); }});</script>", name); 

     return MvcHtmlString.Create(output); 
    } 

    public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value) 
    { 
     return htmlHelper.CkEditor(name, value, null); 
    } 

    public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) where TModel : class 
    { 
     ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
     return htmlHelper.CkEditor(metadata.PropertyName, metadata.Model as string, htmlAttributes); 
    } 

    public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class 
    { 
     return htmlHelper.CkEditorFor(expression, null); 
    } 
संबंधित मुद्दे