2015-08-20 4 views
5

मुझे कोई समस्या है और मुझे समाधान नहीं मिल रहा है। मैं रेजर का उपयोग कर रहा हूं और यह मेरी वीमोडेल क्लास है।रेज़र में एकाधिक चेकबॉक्स (foreach का उपयोग करके)

public class GroupToExport 
{ 
    public GroupToExport() 
    { 
     ToExport = false; 
    } 

    [DisplayName("Export")] 
    public bool ToExport { get; set; } 
    public Group Group { get; set; } 

} 

public class GroupsToExport 
{ 
    public GroupsToExport() 
    { 
     //refill list 
    } 

    public List<GroupToExport> ExportingGroups { get; set; } 
} 

दृश्य:

@using (Html.BeginForm("Export", "ElmahGroup", FormMethod.Post, new { id = "toExportForm" })) 
{ 
//some divs 
    <input type="submit" id="js-export-submit" value="Export" /> 
@foreach (var item in Model.ExportingGroups) 
       { 
        <tr> 
         <td class="js-export-checkbox"> 
          @Html.CheckBoxFor(modelItem => item.ToExport) 
         </td> 
        </tr> 
       } 
//some divs 
} 

नियंत्रक:

public ActionResult Export(GroupsToExport model) 
    { 
     var groupsToExport = model.ExportingGroups.Where(x => x.ToExport).Select(x => x); 
     throw new System.NotImplementedException(); 
    } 

के बाद, "ToExport" प्रस्तुत नियंत्रक में, हर समूह हमेशा मूल्य 'असत्य' है। यहां तक ​​कि यदि सभी समूहों की जांच की जाती है।

क्या कोई मेरी मदद कर सकता है? मैं क्या गलत कर रहा हूँ?

+0

मॉडल (पैरामीटर) में डेटा आपके पास कैसे आता है। शायद आपको चेकबॉक्स-एचटीएमएल का नाम देखना चाहिए। –

उत्तर

8

आप संग्रह के लिए नियंत्रण उत्पन्न करने के लिए foreach लूप का उपयोग नहीं कर सकते हैं। एचटीएमएल जो आप प्रत्येक चेकबॉक्स के लिए उत्पन्न कर रहे हैं (और संबंधित छिपे इनपुट के लिए) <input type="checkbox" name="item.ToExport" .../> है। आपके मॉडल में ऐसी संपत्ति नहीं है जिसका नाम item है।

एक for पाश

@for(int i = 0; i < Model.ExportingGroups.Count; i++) 
{ 
    <tr> 
    <td class="js-export-checkbox"> 
     @Html.CheckBoxFor(m => m.ExportingGroups[i].ToExport) 
    </td> 
    </tr> 
} 

अभी सेवा का उपयोग अपने HTML

<input name="ExportingGroups[0].ToExport" .../> 
<input name="ExportingGroups[1].ToExport" .../> 

हो जाएगा आदि जो सही ढंग से अपने मॉडल

संपादित करने के लिए

वैकल्पिक रूप से आप कर सकते हैं के लिए बाध्य होगा एक custo का उपयोग करें टाइप GroupToExport के लिए। एक आंशिक दृश्य बनाएँ /Views/Shared/EditorTemplates/GroupToExport.cshtml

@model yourAssembly.GroupToExport 
<tr> 
    <td class="js-export-checkbox"> 
    @Html.CheckBoxFor(m => m.ToExport) 
    </td> 
</tr> 
मुख्य दृश्य

@Html.EditorFor(m => m.ExportingGroups) 

EditorFor() विधि टेम्पलेट के आधार पर अपने संग्रह में प्रत्येक आइटम के लिए सही एचटीएमएल उत्पन्न होगा में

और फिर।

+0

'आप फ़ोरैच लूप का उपयोग नहीं कर सकते हैं' - यदि आप लूप के अंदर 'EditorFor' का उपयोग करते हैं तो आप कर सकते हैं? – ediblecode

+0

@jumpingcode, यदि आप 'GroupToExport' टाइप करने के लिए एक संपादक टेम्पलेट का उपयोग करते हैं, तो आपको' foreach' लूप 'की आवश्यकता नहीं है (और इसका उपयोग नहीं करना चाहिए) - यह केवल' @ Html.EditorFor (m => m होगा। निर्यात समूह) ' –

+0

मैं सहमत हूं, लेकिन आपने एक व्यापक बयान दिया है जो तकनीकी रूप से सत्य नहीं है – ediblecode

4

आप गलत सिंटैक्स का उपयोग कर रहे हैं मानों नक्शे पर वापस जब वे, पोस्ट कर रहे हैं के बाद से एक चेकबॉक्स की जाँच मूल्य डिफ़ॉल्ट रूप से गलत पर initialised है, इसलिए इस कारण है कि यह हमेशा गलत है, उपयोग sysntax

@for(int i = 0; i < Model.ExportingGroups.Count(); i++) 
      { 
       <tr> 
        <td class="js-export-checkbox"> 
         @Html.CheckBoxFor(modelItem => Model.ExportingGroups[i].ToExport) 
        </td> 
       </tr> 
      } 
//some divs 

यह उन सभी मूल्यों को वापस मैप करना चाहिए जिन्हें आप ढूंढ रहे हैं।

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