为什么我的模型会丢失下拉列表项?

时间:2015-07-02 14:42:01

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有一个简单的页面mvc,只有一个动作。 在索引操作中获取方法我创建了属性model.categoria的实例,并且我使用3个项进行了值。 问题是,如果我运行post post of action,如下所示,我有一个错误,因为dropdownlist关联的model.categoria为null。 我的问题是: 我总是在每个帖子中实例化model.categoria以避免这个问题,今天我想知道,这是正确的吗?

以下是我将返回错误的代码: 值不能为空。

控制器操作:

public ActionResult Index()
{
    var model = new Models.UploadVideoPage.UploadVideoPageModel();
    model.categoria = new List<Models.UploadVideoPage.ListCategorie>();
    model.categoria.Add(new ListCategorie { TitoloCategoria = "Volontariato", idCategoria = 1 });
    model.categoria.Add(new ListCategorie { TitoloCategoria = "Interno", idCategoria = 2 });
    model.categoria.Add(new ListCategorie { TitoloCategoria = "Sindacato", idCategoria = 3 });
    return View(model);
}
[HttpPost]
public ActionResult Index(Models.UploadVideoPage.UploadVideoPageModel model) 
{
    return View(model);
}

index.cshtml

 @Html.LabelFor(x => x.categoria)
            @Html.DropDownListFor(x => x.categoria.First().idCategoria, new SelectList(Model.categoria, "idCategoria", "TitoloCategoria"))

1 个答案:

答案 0 :(得分:2)

每次回发时都必须填充列表,除非您为表单中的所有值添加隐藏字段。虽然只需要几行代码就能使这项工作变得不同

public ActionResult Index()
    {
        var model = new Models.UploadVideoPage.UploadVideoPageModel();
        PopulateDependencies(model);
        return View(model);
    }
    [HttpPost]
    public ActionResult Index(Models.UploadVideoPage.UploadVideoPageModel model)
    {
        PopulateDependencies(model);
        return View(model);
    }

    private void PopulateDependencies(Models.UploadVideoPage.UploadVideoPageModel model)
    {
        model.categoria = new List<Models.UploadVideoPage.ListCategorie>();
        model.categoria.Add(new ListCategorie { TitoloCategoria = "Volontariato", idCategoria = 1 });
        model.categoria.Add(new ListCategorie { TitoloCategoria = "Interno", idCategoria = 2 });
        model.categoria.Add(new ListCategorie { TitoloCategoria = "Sindacato", idCategoria = 3 });
    }