2013-04-17 11 views
10

मुझे एमवीसी में htmlhelper के लिए dropdownlist का उपयोग करने में समस्याएं आ रही हैं। जब पोस्ट बैक होता है तो कुछ भी नहीं चुना जाता है और सूची में मॉडल के मान हैं, और चयनित आइटम शून्य है।एमवीसी DropDownListFor शून्य मान

यहाँ मेरी मॉडल हैं:

namespace MvcTestWebApp.Models 
{ 
    public class Customer 
    { 
     public string name { get; set; } 

     public List<SelectListItem> members { get; set; } 

     public Member selected { get; set; } 
    } 

    public class Member 
    { 
     public string name { get; set; } 

    } 
} 

नियंत्रक:

namespace MvcTestWebApp.Models 
{ 
    public class CustomerController : Controller 
    { 
     // 
     // GET: /Customer/ 
     public ActionResult Index() 
     { 
      Customer cust = new Customer() { name = "Cust1" }; 
      cust.members = new List<SelectListItem>(); 

      cust.members.Add(new SelectListItem(){Text = "Bob"}); 
      cust.members.Add(new SelectListItem(){Text = "Dave"}); 

      return View(cust); 
     } 

     [HttpPost] 
     public ActionResult Index(Customer customer) 
     { 

      return View(); 
     } 


    } 
} 

और दृश्य:

@model MvcTestWebApp.Models.Customer 

@{ 
    ViewBag.Title = "Customer"; 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 

<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title> Index </title> 
</head> 

    <body> 


@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Customer Data</legend> 

      @Html.HiddenFor(model => model.name) 

      @Html.DropDownListFor(model => model.selected, Model.members, "--Select--") 

     <p> 
      <input type="submit" value="Save" /> 
     </p> 

     </fieldset> 
} 

    </body> 

</html> 

जब मैं चयन सूची से कुछ का चयन और सबमिट बटन nulls हैं क्लिक करें लौटा:

nullselect

क्या कोई भी गलत क्या कर रहा है उस पर कुछ प्रकाश डाल सकता है? मान सेट करने के

उत्तर

19

मुद्दा आप में चल रहे हैं MVC कैसे ड्रॉप डाउन सूची के चयनित मान (जो एक स्ट्रिंग है) अनुवाद करने के लिए पता नहीं है कि है ऑब्जेक्ट सदस्य

आपको क्या करना चाहिए एक चयनित वैल्यू प्रॉपर्टी है जिसका उपयोग ड्रॉपडाउन में मान सेट करने और लौटाए गए मान को पुनर्प्राप्त करने के लिए किया जाता है।

नया ग्राहक वर्ग:

public class Customer 
{ 
    public string name { get; set; } 

    public List<SelectListItem> members { get; set; } 

    public string selectedValue { get; set; } 

    public Member selected { get; set; } 
} 

अपडेट किया गया ड्रापडाउन सूची नियंत्रण:

@Html.DropDownListFor(model => model.selectedValue, Model.members, "--Select--") 

यह गुण selectedValue में लटकती सूची से चयनित मान प्रदान करेंगे।

कारण है कि आपकी सदस्यों की सूची शून्य हो गई है क्योंकि HTML ड्रॉप डाउन सूची में विकल्पों को वापस नहीं करता है, यह केवल चयनित मान देता है। इसलिए जब जानकारी विधि में आती है, तो इसे केवल इनपुट रूपों के मान दिए जाते हैं।

आप क्या जानकारी वापस सर्वर आप डेवलपर कंसोल का उपयोग करें और वापसी HTTP अनुरोध

और/या

पर कब्जा कर सकते हैं करने के लिए भेजा जाता है

आप नियंत्रक के मापदंडों को FormCollection collection जोड़ सकते हैं देखना चाहते हैं यह देखने के लिए कार्रवाई कि एमवीसी किस प्रकार की विधियों को पारित करने वाली वस्तुओं को बनाने के लिए उपयोग कर रहा है।

[HttpPost] 
public ActionResult Index(Customer customer, FormCollection collection) 
{ 

    return View(); 
} 
+0

आह में पाठ्यक्रम बनाएं। बहुत बहुत धन्यवाद स्टीफन। जब आप जानते हैं कि आसान है। –

+0

+1 "आप नियंत्रक कार्रवाई के पैरामीटर में फॉर्मकॉलेक्शन संग्रह जोड़ सकते हैं यह देखने के लिए कि एमवीसी किस तरीके से उपयोग की जाने वाली वस्तुओं को बनाने के लिए उपयोग कर रहा है।" मैंने गलती से एक और रूप के लिए एट्रिब्यूट फॉर्म सेट किया और मैंने कुछ घंटों के लिए सोचा, कि मेरा ड्रॉपडाउनलिस्ट फ़ॉर ग्रिड वापस नहीं करना चाहता ... फॉर्मकॉलेक्शन ने मुझे बताया कि समस्या मॉडल नहीं है – cadi2108

0
cust.members.Add(new SelectListItem(){Text = "Bob"}); 
cust.members.Add(new SelectListItem(){Text = "Dave"}); 

प्रयास करें:

cust.members.Add(new SelectListItem(){Value = "Bob", Text = "Bob"}); 
cust.members.Add(new SelectListItem(){Value = "Dave", Text = "Dave"}); 
+0

नोप अभी भी काम नहीं करता है। अच्छा प्रयास करें :) मैंने सोचा कि शायद यह एक चेहरे के बाद किया हो सकता है लेकिन नहीं, यह अभी भी शून्य है। मैंने cust को बदलने का भी प्रयास किया। एक SelectListItem में चुना गया और यह या तो काम नहीं किया। –

+1

@ क्रिस्टोफर टाउनसेन्ड बदलें सहायक संपत्ति '@ एचटीएमएल.ड्रॉपडाउन लिस्टफ़ोर (मॉडल => model.selected.name, मॉडल।सदस्यों, "- चयन करें -") 'और जीईटी कार्रवाई' ऑब्जेक्ट '(नाम = "कस्ट 1", चयनित = नए सदस्य()} ' – webdeveloper

-3

आसानी से समस्या को ठीक करने के लिए jQuery प्रीपेन्ड का उपयोग करें।

$("#idOfSelectTag").prepend(' 
           <option selected="selected" value="null"> 
           -- Select School -- 
           </option> 
          '); 
संबंधित मुद्दे