2011-02-14 23 views
6

इस कोड को इस ट्यूटोरियल में कुछ ASP.Net MVC 2 कोड से परिवर्तित कर दिया गया:
MVC 2 Editor Template with DateTimeASP.Net MVC 3 EditorTemplate

यह रूप में EditorTemplates/दिनांक समय संग्रहीत दिनांक समय क्षेत्रों के लिए एक कस्टम EditorTemplate है .cshtml '।

CS1973:

@Model DateTime? 
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" }) 

हालांकि मैं निम्न त्रुटि जब @Html.EditorFor(model => model.NewAbsence.StartDate) का उपयोग कर पाने 'System.Web.Mvc.HtmlHelper' नहीं लागू विधि 'पाठ बॉक्स' नाम दिया है, लेकिन है कि द्वारा एक विस्तार विधि के लिए प्रकट होता नाम। एक्सटेंशन विधियों को गतिशील रूप से प्रेषित नहीं किया जा सकता है। गतिशील तर्कों को कास्ट करने या एक्सटेंशन विधि वाक्यविन्यास के बिना एक्सटेंशन विधि को कॉल करने पर विचार करें।

मैंने यहां कुछ समान पोस्ट देखी हैं जो संपादक के विधि के पैरामीटर कास्टिंग का उल्लेख करते हैं, हालांकि मुझे यह मेरे उदाहरण में काम करने के लिए प्रतीत नहीं होता है।

क्या कोई यह बता सकता है कि मुझे अपने कोड में क्या बदलने की आवश्यकता होगी। धन्यवाद।

+0

:

@Html.TextBox("myTextBoxName", (string)Model.MyTextBoxValue) @Html.DropDownList("myDropDownName", (SelectList)Model.MySelectList)) 

वैसे, सिर्फ संभावित अपने बालों को खींच से लोगों को रोकने के लिए, कि selectList ठीक से की तरह कुछ के साथ instantiated हो गया है 'मॉडल' किस प्रकार का है? – SLaks

+0

व्यू वास्तव में एक व्यूमोडेल पर आधारित है जिसमें इस फ़ॉर्म के लिए कस्टम डेटा है। फॉर्म एक फॉर्म बनाएं, इसलिए मॉडल। न्यूएब्सेंस टाइप एब्सेंस है जिसमें डिफ़ॉल्ट मान हैं। ऐसा लगता है कि आंशिक संपादक टेम्पलेट का उपयोग किया जा रहा है, इसलिए डेटटाइम का प्रकार होगा ?? – Banford

उत्तर

0

के चारों ओर एक अस्थायी काम के रूप में मैं उपयोग कर रहा हूँ:

$(".date-field > input").datepicker({ 
       showOn: "button", 
       buttonImage: "*pathtoimage*" 
      }); 

'तारीख-क्षेत्र' div भीतर इनपुट टैग तिथि चयनकर्ता को लागू करने के लिए:

<div class="editor-field date-field"> 
    @Html.EditorFor(model => model.NewAbsence.StartDate) 
    @Html.ValidationMessageFor(model => model.NewAbsence.StartDate) 
</div> 

फिर jQuery चयनकर्ता का उपयोग । हालांकि यह अभी भी दिनांक मान को प्रारूपित नहीं करता है कि मैं इसे प्रारंभ में प्रदर्शित करना चाहता हूं, और पूरी तरह से संपादक टेम्पलेट को काटता हूं।

11

वास्तव में यह लोअरकेस m साथ @model है:

@Model DateTime? 
+0

रेजर में इंटेलिजेंस यह पूंजी एम के लिए स्वत: संक्रमित करता है ?? – Banford

+1

@ बैनफोर्ड, कभी भी इंटेलिजेंस पर भरोसा न करें :-) –

+0

ठीक है इसलिए मैंने अपने अन्य विचारों की जांच की और वे सभी लोअरकेस हैं। इसे लोअरकेस में बदलने से उस खंड को पीले रंग में हाइलाइट किया गया है। लेकिन अब कोड संपादक टेम्पलेट में दूसरी पंक्ति पर त्रुटि कर रहा है। उन्होंने कहा कि: CS0103: नाम 'मॉडल' वर्तमान संदर्भ में मौजूद नहीं है @ Html.TextBox ("", (model.HasValue model.Value.ToShortDateString(): string.Empty), नई {@class = "datepicker"}) – Banford

0

त्रुटि संदेश अपने पाठ बॉक्स बयान से आता है:

@model DateTime? 
^ 
बजाय

। एक टेम्पलेट में, यह एक गतिशील अभिव्यक्ति बन जाता है, और .Net मॉडल गुणों को टाइप करने के बारे में नहीं जानता है।

@Html.TextBox("", (string)(Model==null ? Model.Value.ToShortDateString() : string.Empty), new { style = "width: 10em;", @class="datefield" }) 

स्पष्ट रूप से स्ट्रिंग के रूप में अपना दिनांक मान डाला गया है, और गतिशील अभिव्यक्ति की जानकारी की आवश्यकता है। मुझे भी .सवैलू संपत्ति के साथ समस्या थी, लेकिन यह आपके प्रश्न का मुद्दा नहीं था।

4

तो संक्षेप में सॉर्ट करें कि लोग क्या कह रहे हैं, और इसे थोड़ा और सामान्य बनाते हैं। आपके विचार घोषित किया जाता है तो यह है कि यह गतिशील मॉडल स्वीकार करता है:

@model dynamic 

फिर विस्तार तरीकों तरह बातें करने के लिए उन्हें पारित कर दिया तर्क के प्रकार पता नहीं लगा सकते हो जाएगा। यहां दो उदाहरण हैं (उस्तरा का उपयोग कर, क्योंकि यह कमाल का है):

@Html.TextBox("myTextBoxName", Model.MyTextBoxValue) 
@Html.DropDownList("myDropDownName", Model.MySelectList)) 

इन मामलों में, इंजन क्या प्रकार Model.MyTextBoxValue या Model.MySelectList हैं पता नहीं है, इसलिए यह समझ नहीं क्या की overloads संकलन करने के लिए विस्तार विधियों।तो आप बस कुछ मजबूत टाइपिंग के साथ-साथ यह मदद:

var items = List<SelectListItem>(); 
... 
new SelectList(items, "Value", "Text"); 
संबंधित मुद्दे