2011-12-16 13 views
16
@Html.CheckBox("orderNumbers", new { value = 1 }) 
@Html.CheckBox("orderNumbers", new { value = 2 }) 
@Html.CheckBox("orderNumbers", new { value = 3 }) 
@Html.CheckBox("orderNumbers", new { value = 4 }) 
@Html.CheckBox("orderNumbers", new { value = 5 }) 

[HttpPost] 
public ActionResult MarkAsCompleted(IEnumerable<int> orderNumbers) { } 

[HttpPost] 
public ActionResult MarkAsCompleted(IEnumerable<string> orderNumbers) { } 

में सरणी/गणनीय int करने के लिए अगर मैं अपने कार्रवाई विधि में पहले हस्ताक्षर का उपयोग करें, मैं एक खाली IEnumerable मिलता है।बाइंड स MVC

यदि मैं दूसरे हस्ताक्षर का उपयोग करता हूं तो मुझे मान प्राप्त होते हैं, लेकिन मुझे अचयनित मानों के लिए झूठा मूल्य भी मिलता है (एमवीसी पैटर्न के कारण सभी छिपे हुए क्षेत्र के साथ सभी चेकबॉक्स को छायांकित करने के पैटर्न)।

उदा। मुझे कुछ orderNumbers = { "1", "2", "false", "4", "false" }

मुझे कुछ संख्याओं की सूची क्यों नहीं मिल सकती है?

उत्तर

8

क्योंकि यह प्रदान किया गया है कि प्रदत्त CheckBoxFor सहायक कैसे काम कर रहा है।

आपको अपने आप को चेकबॉक्स के लिए HTML उत्पन्न करना होगा। फिर छिपे हुए इनपुट उत्पन्न नहीं होते हैं और आपको केवल चयनित पूर्णांक मान प्राप्त होंगे।

+0

दरअसल, निश्चित रूप से मैं ऐसा। क्या बेवकूफ है! मुझे गलत लगता है कि वे झूठे मूल्यों को अनदेखा करने के लिए मॉडल बाइंडर में कुछ चालाक कर चुके होंगे अगर वे अनुरोधित प्रकार से बाध्य नहीं हो सकते थे। – fearofawhackplanet

23

आप सभी चेक किए गए मान निम्न तरीके से प्राप्त कर सकते हैं।

नियंत्रक कोड:

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

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(string[] orderNumbers) 
    { 
     return View(); 
    } 

देखें कोड:

@using (Html.BeginForm()) 
{ 
    <input name="orderNumbers" type="checkbox" value="1" /> 
    <input name="orderNumbers" type="checkbox" value="2" /> 
    <input name="orderNumbers" type="checkbox" value="3" /> 
    <input name="orderNumbers" type="checkbox" value="4" /> 
    <input name="orderNumbers" type="checkbox" value="5" /> 

    <input type="submit" name="temp" value="hi" /> 
} 

कृपया मेरे मन में एक बात यह है कि, आप सभी चेक बॉक्स के लिए एक ही नाम देने के लिए की जरूरत है रखने के लिए। सरणी में आपको सभी चेक किए गए चेकबॉक्स के लिए मान प्राप्त होंगे।

5

alok_dida के महान उत्तर के अतिरिक्त। चूंकि सभी मान पूर्णांक हैं, इसलिए आप अपने नियंत्रक कोड को पूर्णांक की सरणी ले सकते हैं और स्वयं रूपांतरण को करने से बच सकते हैं।

यह MVC4 + में काम करता है:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(int[] orderNumbers) 
{ 
    return View(); 
} 
संबंधित मुद्दे