2010-03-09 10 views
11

ASP.Net में CheckBoxFor मेरा मानना ​​है कि इस सवाल का किसी भी लागू होता है "के लिए" एचटीएमएल सहायकों, लेकिन मेरे विशिष्ट समस्या CheckBoxFor उपयोग कर रहा है ...Foreach IEnumerable संपत्ति पर और MVC

मैं एक मॉडल की है कि है IENumerable टाइप करें, जहां अधिकार एक साधारण पॉको है। यह मॉडल वास्तव में एक बड़े मॉडल की एक संपत्ति है जिसे मैंने एक संपादक टेम्पलेट बनाया है। यहाँ मेरी मॉडल की बड़ी तस्वीर है:

public class bigmodel 
{ 
    public string Title {get; set;} 
    public string Description {get; set;} 

    [UIHint("ListRights")] 
    public IEnumerable<rights> Rights {get;set;} 
} 

public class rights 
{ 
    public bool HasAccess {get; set;} 
    public string Description {get;set;} 
} 

मैं एक editortemplate "ListRights" मेरी मुख्य दृश्य का उपयोग करता है बुलाया बनाया। उदाहरण के लिए: <% = एचटीएमएल.एडिटरफ़ोर (एम => एम राइट्स)%>।

ListRights.ascx में, मैं इस तरह कोड हैं:

<table> 
    <% foreach(rights access in Model) 
    { %> 
     <tr> 
     <td> 
      <%=Html.CheckBoxFor(access) %> 
     </td> 
     <td> 
      <%=access.Description %> 
     </td> 
     </tr> 
    <% } %> 
</table> 

मैं जानता हूँ कि CheckBoxFor लाइन काम नहीं करता है, लेकिन मैं, कुछ है कि एक ही परिणाम उत्पन्न करता है क्या करना चाहते हैं के रूप में यदि पहुँच एक संपत्ति पर था आदर्श।

उपर्युक्त उदाहरण में, मैं सबकुछ पोस्ट पर ऑटोबैंड करना चाहता हूं।

मैं इस के समान कोड चेकबॉक्स faking की कोशिश की है, लेकिन यह autobind नहीं करता है:

<table> 
    <% for(int i=0; i < Model.Count(); i++) 
    { %> 
     <tr> 
     <td> 
      <%=Html.CheckBox(string.Format("[{0}].HasAccess",i), Model.ElementAt(i).HasAccess)%> 
     </td> 
     <td> 
      <%=access.Description %> 
     </td> 
     </tr> 
    <% } %> 
</table> 

कोई सुझाव?

उत्तर

5

मैं http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

में स्टीव सैंडरसन द्वारा एक ब्लॉग पोस्ट का उपयोग करके जवाब मिला "Html.BeginCollectionItem" का उपयोग मेरी स्थिति में काम किया।

मैंने अधिकारों के लिए एक संपादक टेम्पलेट बनाया (मेरे उदाहरण में)। फिर स्टीव के BeginCollectionItem उस टेम्पलेट में जोड़ा। मैंने स्टीव के ब्लॉग में सुझाए गए अनुसार HTML.RenderPartial का उपयोग करके टेम्पलेट को बुलाया।

मैं HTML.EditorFor (m => m.item) का उपयोग करना चाहता था, लेकिन यह काम नहीं करता है क्योंकि आइटम ForEach में है और मॉडल में नहीं है। संपादक इस मामले में इस्तेमाल किया जा सकता है?

+0

मुझे नहीं पता वास्तव में यह जवाब प्राप्त करें, आप इस समस्या से क्यों गुजरेंगे? – mare

+0

ठीक है, कुछ और सोचने और स्टीवन के ब्लॉग पर जाने के बाद, मैं देखता हूं कि आप क्या हासिल करने की कोशिश कर रहे हैं। स्टीव के समाधान इस मामले में काम करते हैं। हालांकि मुझे नहीं लगता कि उपयोगकर्ता अनुभव इस मामले में कोई अच्छा है - इस तरह से कई आइटम संपादित करना और उन सभी को एक बार में नियंत्रक को पोस्ट करना। – mare

12

मुझे लगता है कि आप समस्या नहीं थी, क्योंकि इस

<%=Html.CheckBoxFor(access) %> 

काम नहीं किया और यह या तो

<%=Html.CheckBoxFor(access=>access.HasAccess) %> 

काम नहीं किया है, लेकिन इस काम करना चाहिए

<%=Html.CheckBoxFor(x=>access.HasAccess) %> 
+0

धन्यवाद! इसने मेरे जीवन को आसान बना दिया है! – Craig

+0

आप मुझे बहुत दर्द, अमीगो बचाओ। ग्रेसियस। –

+0

एक आकर्षण की तरह काम किया .. धन्यवाद – shazia

संबंधित मुद्दे