मैं एक सूची है कि कस्टम मॉडल बांधने की मशीन का सहारा के बिना एक बड़ा दृश्य मॉडल का हिस्सा है बाध्य करने के लिए प्रयास कर रहा हूँ में IList बाइंडिंग। जब मैं इनपुट की सूची बनाने के लिए एक संपादक टेम्पलेट का उपयोग करता हूं, तो जेनरेट किए गए नाम काम करने के लिए डिफ़ॉल्ट बाइंडर के सही प्रारूप में नहीं होते हैं।ASP.NET MVC मॉडल एक संपादक खाका
आइटम [3] .id जैसे मैं इसे आइटम है उम्मीद करेंगे के बजाय। [3] .id। अगर मैं एक संपादक टेम्पलेट के बिना सूची का निर्माण करता हूं तो यह अपेक्षित के रूप में काम करता है।
मैं स्पष्ट रूप से गलत कुछ कर रही हूँ या यह सिर्फ Html.Hidden और Html.TextBox के एक मोड़ है?
public class ItemWrapper
{
[UIHint("ItemList")]
public IList<Item> Items { get; set; }
}
public class Item
{
public Guid Id { get; set; }
public string Name { get; set; }
public int Value { get; set; }
}
index.aspx
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<% using(Html.BeginForm())
{%>
<%:Html.EditorFor(m => m.Items) %>
<%}%>
</asp:Content>
ItemList.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<Mvc2Test.Models.Item>>" %>
<h4>Asset Class Allocation</h4>
<% if(Model.Count > 0) { %>
<table>
<tbody>
<% for(int i = 0; i < Model.Count; i++)
{%>
<tr>
<td><%: Model[i].Name%></td>
<td>
<%: Html.HiddenFor(m => m[i].Id) %>
<%: Html.TextBoxFor(m => m[i].Value) %>
</td>
</tr>
<%}%>
</tbody>
</table>
<%
}%>
आउटपुट
<tr>
<td>Item 4</td>
<td>
<input id="Items__3__Id" name="Items.[3].Id" type="hidden" value="f52a1f57-fca8-4bc5-a746-ee0cef4e05c2" />
<input id="Items__3__Value" name="Items.[3].Value" type="text" value="40" />
</td>
</tr>
संपादित (कार्रवाई विधि)
public ActionResult Test()
{
return View(
new ItemWrapper
{
Items = new List<Item>
{
{ new Item { Id = Guid.NewGuid(), Name = "Item 1", Value = 10 } },
{ new Item { Id = Guid.NewGuid(), Name = "Item 2", Value = 20 } },
{ new Item { Id = Guid.NewGuid(), Name = "Item 3", Value = 30 } },
{ new Item { Id = Guid.NewGuid(), Name = "Item 4", Value = 40 } }
}
});
}
# संपादित 2
HttpPost कार्रवाई
[HttpPost]
public ActionResult Test(ItemWrapper w)
{
if(w.Items == null)
Response.Write("Items was null");
else
Response.Write("Items found " + w.Items.Count.ToString());
return null;
}
index.aspx
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h4>Does Not Work</h4>
<% using(Html.BeginForm("Test", "Home"))
{%>
<%:Html.EditorFor(m => m.Items) %>
<input type="submit" value-"Go" />
<%}%>
<h4>Does Work</h4>
<% using(Html.BeginForm("Test", "Home"))
{%>
<table>
<tbody>
<% for(int i = 0; i < Model.Items.Count; i++)
{%>
<tr>
<td><%: Model.Items[i].Name%></td>
<td>
<%: Html.HiddenFor(m => Model.Items[i].Id) %>
<%: Html.TextBoxFor(m => Model.Items[i].Value) %>
</td>
</tr>
<%}%>
</tbody>
</table>
<input type="submit" value-"Go" />
<%}%>
</asp:Content>
तो यह वास्तव में जिस तरह से MVC उत्पन्न फ़ील्ड नाम में एक मोड़ है। आंशिक दृश्य इस बात पर विचार नहीं कर रहा है कि फ़ील्ड नाम उत्पन्न करते समय मॉडल संग्रह होता है। मुझे लगता है कि आइटम।आंशिक दृश्य स्तर की बजाय दृश्य स्तर पर बनाया गया है, तो इसे ठीक करने का एक अच्छा तरीका नहीं हो सकता है। धन्यवाद। –
कोंडोटिन: एएसपीएनटी एमवीसी बग की तरह लगता है, क्या किसी ने अभी तक इसकी सूचना दी है? – Wout
ठीक है, मैंने खुद की सूचना दी: http://aspnet.codeplex.com/workitem/7711, कृपया इस बग फिक्स के लिए वोट दें! – Wout