2011-10-03 19 views
24

देखने के लिए सरणी बांध नहीं सकता है मेरे पास एक दृश्य मॉडल है जिसमें से चेकबॉक्स का एक सेट शामिल है। मेरे नियंत्रक की पोस्ट बैक विधि में बाइंडिंग करते समय मुझे सरणी में मैप करने के लिए चेक बॉक्स की आवश्यकता होती है।एएसपी.नेट एमवीसी - मॉडल

यहां दृश्य मॉडल है।

@model TMDM.Models.TestSeriesCreateViewModel 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create a Test Series</h2> 


@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Title) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Title) 
      @Html.ValidationMessageFor(model => model.Title) 
     </div> 

     <h3>Which Test Collections are in this Test Series?</h3> 
     <div class="editor-field"> 
     @{ 
      var i = 0; 
      foreach (var testCollection in Model.TestCollections) 
      { 
       <input type="checkbox" id="ChosenTestCollectionIds[@i]" name="ChosenTestCollectionIds[@i]" value="@testCollection.Id" /> 
       <span>@testCollection.Title</span> 
       <br /> 
       i++; 
      } 
     } 
     </div> 

     <p> 
      <input type="submit" value="Save" class="medium green awesome" /> 
      @Html.ActionLink("Cancel", "Index", "TestSeries", null, new { @class = "medium black awesome" }) 
     </p> 
    </fieldset> 

रूप रेंडरिंग ठीक है, मैं स्रोत देख लिया है और प्रत्येक उत्पादन चेक बॉक्स उनके आईडी और नाम फ़ील्ड के लिए एक अलग संख्या है।

<input type="checkbox" id="ChosenTestCollectionIds[0]" name="ChosenTestCollectionIds[0]" value="5" /> 
<input type="checkbox" id="ChosenTestCollectionIds[1]" name="ChosenTestCollectionIds[1]" value="6" /> 
//etc... 

यहां दृश्य मॉडल है।

public class TestSeriesModel 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
} 

public class TestSeriesCreateViewModel : TestSeriesModel 
{ 
    public List<ITestCollectionDataObject> TestCollections { get; set; } 
    public int[] ChosenTestCollectionIds { get; set; } 
} 

समस्या यह है कि जब मैं फॉर्म पोस्ट करता हूं तो ChosenTestCollectionIds सरणी वापस वापस आती है। मुझसे यहां क्या गलत हो रहा है?

उत्तर

मैं बाहर काम किया है कि यह कैसे करना है:

<input type="checkbox" id="[@i]" name="ChosenTestCollectionIds" value="@testCollection.Id" /> 
+1

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

+0

@ पैनब्रब्रश: बिल्कुल सही। मुझे 2 से मारने के लिए +1। –

उत्तर

14
<input type="checkbox" id="[@i]" name="ChosenTestCollectionIds" value="@testCollection.Id" /> 
0

सभी के लिए इनपुट प्रकार के नाम सेट एक ही होना। यदि आप केवल एक सूची से अधिक जटिल मॉडल को बांधने की कोशिश कर रहे हैं तो आप कस्टम मॉडल बाइंडर भी बना सकते हैं। यहाँ अपने मॉडल

Various Model Binding techniques

8

मैं हमेशा एक सूची बंधन मॉडल के बारे में वापस फिल Haack पद पर आने के लिए बाध्य करने के लिए अलग अलग तरीकों पर एक उत्कृष्ट लेख है। इसके अलावा, मैं हमेशा अपनी खुद की अनुक्रमणिका को परिभाषित करता हूं क्योंकि मेरा उपयोगकर्ता क्लाइंट पक्ष की सूची बदल देगा और फिर परिवर्तनों को वापस पोस्ट करेगा।

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

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