2013-01-04 13 views
35

मैं निम्नलिखित मॉडल कहते हैं:ASP.NET MVC 4 - पाश पदों मॉडल संग्रह गुण लेकिन foreach के लिए नहीं है

@model Town 
@using(Html.BeginForm()) 
{ 
    <table> 
     @foreach(var person in Model.People) 
     { 
      <tr> 
       <td>@Html.TextBoxFor(m => person.Name)</td> 
       <td>@Html.TextBoxFor(m => person.Age)</td> 
      </tr> 
     } 
    <table> 
    <input type="submit" /> 
} 
: फिर

public class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

public class Town 
{ 
    public string Name { get; set; } 
    public IEnumerable<Person> People { get; set; } 
} 

, मेरे उस्तरा ध्यान में रखते हुए, मैं इस राशि

[HttpPost] 
public ActionResult Index(Town theTown) 
{ 
    //.... 
} 

जब मैं पोस्ट, IEnumerable<Person> नहीं आती है:

फिर, मैं, कुछ इस तरह पोस्ट के लिए एक कार्य है भर में। अगर मैं फ़िडलर में इसे देख, संग्रह केवल एक बार पोस्ट, और संग्रह की गणना नहीं करता है, तो मैं मिलता है:

People.Name = "whatever" 
People.Age = 99 

हालांकि, अगर मैं एक IList के लोग बदल सकते हैं और एक के बजाय पाश के लिए एक का उपयोग foreach ...

@for(var i = 0;i < Model.People.Count;i++) 
{ 
    <tr> 
     <td>@Html.TextBoxFor(m => Model.People[i].Name)</td> 
     <td>@Html.TextBoxFor(m => Model.People[i].Age)</td> 
    </tr> 
} 

यह काम करता है। क्या मुझसे कुछ गलत हो रही है? मैं क्या खो रहा हूँ?

+3

यह सामान्य व्यवहार है। मॉडल बाइंडर प्रस्तुत एचटीएमएल से इनपुट तत्वों की नाम संपत्ति का उपयोग करता है। इंडेक्सर के साथ लूप का उपयोग करना अद्वितीय नाम रखने का एकमात्र तरीका है कि मॉडल बाइंडर मॉडल –

उत्तर

59

समस्या IEnumerable या IList के साथ नहीं है जिस तरह से आप अपने दृश्य में संग्रह को प्रस्तुत कर रहे हैं।

@for(var i = 0;i < Model.People.Count;i++) 
{ 
    <tr> 
     <td>@Html.TextBoxFor(m => Model.People[i].Name)</td> 
     <td>@Html.TextBoxFor(m => Model.People[i].Age)</td> 
    </tr> 
} 

का निरीक्षण करें प्रत्येक सूची आइटम आप एक सतत सूचकांक जो अपना जादू

करने के लिए एक good read

+4

से संबद्ध हो सकता है यह जेनेरिक.इनेमरेबल संग्रह पर काम नहीं करेगा, इसलिए आपको अपने संग्रह को किसी सूचकांक संग्रह में बदलने की आवश्यकता होगी । – Eric

+0

धन्यवाद। अच्छा मदद –

0

आप सभी को याद मॉडल खुद के बजाय वर रखकर किया गया था (मॉडल बांधने की मशीन के लिए सक्षम बनाता जोड़कर कर रहे हैं के साथ लोग)

<table> 
@foreach(People person in Model.People) 
{ 
<tr> 
<td>@Html.TextBoxFor(m => person.Name)</td> 
<td>@Html.TextBoxFor(m => person.Age)</td> 
</tr> 
} 
<table> 
<input type="submit" /> 
+6

पोस्ट अनुरोधों के लिए काम नहीं करेगा क्योंकि जेसन deserializer इन गुणों को खेतों में मिलान करने में सक्षम नहीं होगा। – Eric

+0

यह काम कर रहा है लेकिन प्रत्येक इनपुट फॉर्म का एक ही नाम और समान मूल्य है। –

+0

@ मुहम्मद अहमशुज़मान तो, आप कैसे कह सकते हैं कि यह काम कर रहा है। – nam

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