1

我有一个表单,它有一个使用模型填充列表的下拉列表,视图被渲染。问题是当我按下提交按钮时,会抛出模型的空指针异常。我想接收在发布操作中选择的值。

这是我的代码:

模型:

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();
    }

查看:这是我得到空指针异常的地方Model.ClientList

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

2 回答 2

2

正如错误试图告诉你的那样,Model.ClientList它是空的。

您需要初始化模型,就像您在 GET 操作中所做的那样。(例如,通过调用相同的函数)

于 2013-07-11T19:03:32.383 回答
2

[HttpPost]action 方法中,您在没有任何视图模型的情况下调用 View() 方法。因此视图内的 Model 属性为空。解决方案是简单地调用 View 并传入BillViewModel.

前任:

[HttpPost]
public ActionResult Index(BillViewModel billViewModel)
{
    return View(billViewModel);
}
于 2013-07-12T08:39:34.887 回答