2013-07-11 40 views
-1

我已經有一個表單,它具有使用模型填充列表的dropDownlist,呈現視圖。問題是,當我按下提交按鈕時,模型的空指針異常被拋出。我想要接收在發佈操作中選擇的值。以mvc形式標記模型

這裏是我的代碼:

型號:

public class BillViewModel 
{ 
    public List<SelectListItem> ClientList { get; set; } 
    public int SelectedClient { get; set; } 
} 

控制器:

public ActionResult Index() 
{ 
    var billRepo = new BillRepo(); 
    var bill = new BillViewModel {ListProducts = billRepo.GetAllProducts()}; 
    bill.ClientList = new List<SelectListItem>(); 
    List<Client> allClientList = billRepo.GetAllClients(); 

    foreach (Client client in allClientList) 
    { 
     var item = new SelectListItem() { Value = client.ClientId.ToString(), Text = client.Name }; 
     bill.ClientList.Add(item); 
    } 

    ViewBag.ClientSelect = new SelectList(billRepo.GetAllClients(), "value", "text", bill.SelectedClient); 

    bill.SelectedClient = 1; 
    return View(bill); 
} 


[HttpPost] 
public ActionResult Index(BillViewModel billViewModel) 
{ 
    return View(); 
} 

觀點:型號

@using (Html.BeginForm()) 
{ 
    @Html.DropDownListFor(item => item.SelectedClient, Model.ClientList, "Select Client") 
    <input type="submit" value="Aceptar"/> 
} 

回答

3

在您的POST操作中,您將返回與GET操作中相同的索引視圖。但是你沒有通過任何模型來看待這個觀點。這就是爲什麼你得到一個NRE。你的觀點必須呈現一個下拉菜單,你需要來填充它的價值,你在你的GET動作做的方式一樣:

[HttpPost] 
public ActionResult Index(BillViewModel billViewModel) 
{ 
    bill.ClientList = billRepo 
     .GetAllClients() 
     .ToList() 
     .Select(x => new SelectListItem 
     { 
      Value = client.ClientId.ToString(), 
      Text = client.Name 
     }) 
     .ToList(); 

    return View(billViewModel); 
} 

通知視圖模型是如何傳遞到視圖以及如何ClientList財產(到您的下拉菜單是綁定的)提交的值。