2013-07-11 38 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财产(到您的下拉菜单是绑定的)提交的值。