2009-03-17 14 views
27

बाध्यकारी [मैं इस अपने आप हल, कारण के लिए मेरा उत्तर देखें]ASP.NET MVC मॉडल एक IList <> पैरामीटर

मैं मुसीबत एक IList < के लिए प्रपत्र मूल्यों हो रही हो रही है> एक नियंत्रक विधि में तर्क ठीक से सेट करें।

मेरे नियंत्रक वर्ग इस तरह दिखता है:

public class ShoppingBasketController : Controller { 

    public ActionResult Index() { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Add(IList<ShoppingBasketItem> items) { 
     Session["basket"] = items; // for testing 
     return RedirectToAction("Index"); 
    } 
} 
public class ShoppingBasketItem { 
    public int ItemID; 
    public int ItemQuantity; 
} 

थोड़ा छंटनी प्रपत्र:

<% using (Html.BeginForm("Add", "ShoppingBasket")) { %> 
    <% int codeIndex = 0; 
    foreach (Product product in products) { %> 
     <%= Html.Hidden("items[" + codeIndex + "].ItemID", product.Id) %> 
     <%= Html.TextBox("items[" + codeIndex + "].ItemQuantity", "0", new { size = "2"}) %> 
     <% codeIndex++; 
    } 
} %> 

कौन सा तरह मार्कअप का उत्पादन:

<form action="/Basket/Add" method="post"> 
    <input id="items[0]_ItemID" name="items[0].ItemID" type="hidden" value="1" /> 
    <input id="items[0]_ItemQuantity" name="items[0].ItemQuantity" size="2" type="text" value="0" /> 

    <input id="items[1]_ItemID" name="items[1].ItemID" type="hidden" value="2" /> 
    <input id="items[1]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" /> 

    <input id="items[2]_ItemID" name="items[2].ItemID" type="hidden" value="3" /> 
    <input id="items[2]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" /> 
</form> 

मैं प्रपत्र मूल्यों देख लिया है कि जमा हो जाओ और वे सही हैं। ShoppingBasketItem की सही संख्या भी Session["basket"] में डाल दी गई है, हालांकि प्रत्येक के ItemID और ItemQuantity दोनों शून्य हैं। ऐसा लगता है कि फॉर्म मानों की सूची को सही ढंग से डीकोड करना प्रतीत होता है, लेकिन गुणों को स्वयं नहीं उठाता है।

मैं एमवीसी आरसी 2 का उपयोग कर रहा हूं, और article by Scott Hanselman पर आधारित हूं, मुझे पूरा यकीन है कि मेरा कोड सही है। क्या मैं कुछ भूल रहा हूँ?

+0

वहाँ यूआई टेम्पलेट्स के साथ इस काम करने के लिए एक रास्ता है, एक EditorFor (एम का उपयोग कर => m.product) उत्पादों में प्रत्येक पुनरावृत्ति के लिए? –

+0

धन्यवाद। मैंने यह वास्तव में उपयोगी पाया। :) –

उत्तर

35

समाधान

MVC स्रोत मैं अभी भी क्यों यह काम नहीं होता नहीं देख सकता था डाउनलोड करने के बाद, तो मैं प्रकल्पित यह प्रकार मैं बाध्य करने के लिए प्रयास कर रहा था के साथ क्या करने के लिए कुछ किया जाना चाहिए। निश्चित रूप से, गुणों के विपरीत, सदस्य चर के रूप में मूल्य, अपराधी था। ऐसा इसलिए है क्योंकि मॉडल बाइंडर गुणों को सेट करने के लिए प्रतिबिंब का उपयोग करता है, जिसे यह TypeDescriptor.GetProperties(Type) पर कॉल के माध्यम से नहीं मिला था।

इस के लिए मूल्य वर्ग अद्यतन कर रहा है इसे हल (सिर दीवार से टकराने के घंटे के बाद मैं जोड़ने चाहिए !!):

public class ShoppingBasketItem { 
    public int ItemID { get; set; } 
    public int ItemQuantity { get; set; } 
} 
+0

मैंने हमेशा सुना था कि सार्वजनिक सदस्य चर सार्वजनिक गुणों के बराबर द्विआधारी नहीं थे (यह एक तोड़ने वाला परिवर्तन है), और अब मुझे लगता है कि मैं आश्वस्त हूं। –

+0

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

+0

आपको बहुत बहुत धन्यवाद! मैं गलत तरीके से पता लगाने की कोशिश कर रहे घंटों तक टेबल पर अपने सिर पर टक्कर लगी थी। – Giablo

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