2013-04-17 31 views
10

我在使用MVC中的htmlhelper dropdownlist時遇到了問題。回發時,沒有選擇任何東西,模型中的值和列表中的值都是空的。MVC 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> 

當我選擇從選擇列表中的東西,並點擊提交按鈕空值返回:

nullselect

任何人都可以闡明我做錯了什麼?

回答

19

你碰到的問題是,MVC不知道如何在下拉列表中選擇的值(這是一個字符串)轉換爲對象成員。

您應該做的是有一個selectedValue屬性,用於設置下拉列表中的值並檢索返回的值。

新的客戶類別:

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。

您的List of members返回null的原因是因爲HTML不會返回下拉列表中的選項,它只返回選定的值。所以當信息進入方法時,只給出輸入表單的值。

如果你想看到什麼樣的信息被髮送回你可以使用開發者控制檯,並獲取返回Http請求

和/或

服務器

您可以添加FormCollection collection控制器的參數查看MVC用於構建傳遞給方法的對象的信息。

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

    return View(); 
} 
+0

Ahh當然。謝謝Stephen。當你知道如何時很容易。 –

+0

+1「您可以將FormCollection集合添加到控制器操作的參數中,以查看MVC用於構建傳遞給方法的對象的信息。」我意外地爲另一個表單設置了賦值表單,我想了幾個小時,我的DropDownListFor不想返回Guid ... FormCollection告訴我,問題是表單不是模型 – 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

不行仍然不起作用。很好,嘗試壽:)我認爲這可能已經做了一次facepalm後,但沒有去,它仍然無效。我也嘗試改變cust.selected一個SelectListItem,這也沒有工作。 –

+1

@ChristopherTownsend更改幫助屬性'@ Html.DropDownListFor(model => model.selected.name,Model。成員「, - 選擇 - 」)'並在GET操作中創建對象'new Customer(){name =「Cust1」,selected = new Member()}' – webdeveloper

-3

使用jQuery在前面加上輕鬆解決這個問題。

$("#idOfSelectTag").prepend(' 
           <option selected="selected" value="null"> 
           -- Select School -- 
           </option> 
          ');