当Posting回Controller时,MVC SelectList在模型中为空

时间:2015-05-22 12:18:11

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

这是我的模特:

[Display(Name = "Company")]
public int CompanyId { get; set; }

public SelectList Companies { get; set; }

为视图设置数据

    [HttpGet]
    [AllowAnonymous]
    public ActionResult Index()
    {
        var model = new Ticket
        {
            Companies = new SelectList(new List<SelectListItem> { new SelectListItem { Text = "0", Value = "0" } }, "Value", "Text")
        };
        return View(model);
    }

观点:

    <div class="form-group">
        @Html.LabelFor(m => m.CompanyId, new { @class = "col-md-6 col-md-pull-1 control-label" })
        <div class="col-md-3 col-md-pull-1">
            @Html.DropDownListFor(m => m.CompanyId, Model.Companies, new { @class = "selectpicker form-control" })
        </div>
    </div>

结果:

This is the result

如何将SelectList发布回Controller,以便我不必继续填充它?

1 个答案:

答案 0 :(得分:1)

Model.Companies不会被绑定,因为不在表单中,ModelBinder正在寻找表单中的输入或查询字符串值与属性的名称(在这种情况下公司)但你没有在具有该名称的视图中,您有一个名为CompanyId的字段,这就是为什么属性CompanyId被绑定。

保存公司列表并在Post操作中获取它的一个好方法是使用TempData,通过TempData,您可以将一个项目保存在一个操作中,它将可用于下一个操作。就像Session一样,但只是一个请求。