为什么我的提交后模型失去了下拉列表项?

3

我有一个简单的页面mvc,只有一个操作。 在索引操作中,我使用Get方法创建了属性model.categoria的一个实例,并用3个项目进行赋值。 问题在于,如果我运行操作的post索引,如下所示,我会遇到一个错误,因为与下拉列表关联的model.categoria为空。 我的问题是: 我每次都实例化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个回答

3

每次进行回传时,您确实需要填充列表,除非您为表单中的所有值放置隐藏字段。不过,只需几行代码即可以不同的方式实现此目标。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接