2011-11-22 28 views
7

मुझे संपादक के बारे में एक अजीब समस्या है MVC3 से सहायक के लिए। यहां बात है: मैं एक चेकबॉक्स सूची प्रदर्शित करने की कोशिश कर रहा हूं और यह काम करता है अगर मैं टेम्पलेट नाम की व्याख्या नहीं करता हूं। हालांकि अगर मैं टेम्पलेट नाम का उपयोग करने का प्रयास करता हूं, तो यह एक अपवाद फेंकता है कि मैं जेनेरिक सूची को पास करने की कोशिश कर रहा हूं, जब मुझे बस अपना दृश्य मॉडल पास करना चाहिए। मैं इसे और अधिक समझ में आता है बनाने के लिए कुछ कोड दिखाएंगे:asp.net-mvc3 संपादक टेम्पलेट नाम समस्या

ViewModel

public class ChkViewModel 
{ 
    public string ContractName {get;set;} 
    public string Contract {get;set;} 
    public bool Checked {get;set;} 
} 

EditorFor टेम्पलेट (यह ContractTemplate कहा जाता है) मेरे विचार से

@model Models.ChkViewModel 
<p> 
    @Html.HiddenFor(x => x.Contract) 
    @Html.LabelFor(x => x.ContractName , Model.ContractName) 
    @Html.CheckBoxFor(x => x.Checked, new { @class = "chkContract" }) 
&nbsp;  
</p> 

अंश

<div id="contractContainer"> 
    @Html.EditorFor(item=>item.ContractList) 
</div> 

यह ठीक काम करता है। लेकिन यह यह करने के लिए प्रयास करें:

<div id="contractContainer"> 
    @Html.EditorFor(item=>item.ContractList, "ContractTemplate") 
</div> 

यह InvalidOperationException फेंकता कह एक सरल ChkViewModel और नहीं एक GenericList ChkViewModel पारित करने के लिए है कि मैं।

मैं केवल यह पूछ रहा हूं क्योंकि मैंने एक और चेकबॉक्स सूची बनाने की कोशिश की है और मैं इसे काम नहीं कर सका (चेकबॉक्स भी प्रदर्शित नहीं करता) और जब मैंने टेम्पलेट नाम सेट करने का प्रयास किया, तो मैं कम से कम चेकबॉक्स देखें, यह उस त्रुटि को फेंक दिया।

+0

आप टेम्पलेट नाम निर्दिष्ट क्यों करना चाहते हैं? – epzee

+0

जैसा कि मैंने पिछले पैराग्राफ पर उल्लेख किया है, मुझे पहले इसकी आवश्यकता नहीं थी, लेकिन जब मैंने एक और उदाहरण बनाने की कोशिश की, तो यह अभी काम नहीं कर सका। इसके अलावा, यदि यह एक पैरामीटर है, तो इसका उपयोग क्यों नहीं करना चाहिए? क्या यह जानना बेहतर होगा कि मैं किस टेम्पलेट का उपयोग कर रहा हूं, विशेष रूप से? – AdrianoRR

उत्तर

6

त्रुटि संदेश सही है, आप अपने टेम्पलेट नाम का उपयोग करना चाहते हैं तो यह इस तरह दिखना चाहिए:

<div id="contractContainer"> 
    @for (int i = 0; i < item.ContractList.Count; i++) { 
     @Html.EditorFor(item => item.ContractList[i], "ContractTemplate") 
    } 
</div> 

यह वही है ASP.NET MVC पहले में आप के लिए पर्दे के पीछे क्या कर रहा है के समान है मामला (यह संग्रह पर पुनरावृत्त करता है और आपके टेम्पलेट को कॉल करता है)।

+2

अरे, धन्यवाद थॉमस, यह काम किया। लेकिन जब मैंने टेम्पलेट नाम पास नहीं किया तो मेरा पहला उदाहरण सही तरीके से क्यों काम करता था? यह मूल रूप से एक ही चेकबॉक्स सूची है। मुझे अभी भी दृश्यों के पीछे एमवीसी क्या नहीं मिलता है। वैसे, मुझे आशा है कि आप अपने jqGrid सहायक में सुधार जारी रखें। – AdrianoRR