c# - 回发到 Controller 时,MVC SelectList 在模型中为空

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

View :

    <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,这样我就不必继续填充它了?

最佳答案

Model.Companies 不会被绑定(bind),因为它不在表单中,ModelBinder 正在查找表单中的输入或带有属性名称(在本例中为 Companies)的查询字符串值,但是您在 View 中没有使用该名称的字段,相反,您有一个名称为 CompanyId 的字段,这就是绑定(bind)属性 CompanyId 的原因。

保存您的公司列表并在 Post 操作中获取它的一个好方法是使用 TempData,使用 TempData 您可以在操作中保存一个项目,它将对下一个可用行动。类似于 Session,但仅针对一个请求。

关于c# - 回发到 Controller 时,MVC SelectList 在模型中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30396552/

相关文章:

c# - 为 MVC 应用程序模拟 System.Web.Routing 中的 RouteData 类

c# - 抛开OO设计模式以在战略游戏中获得更好的性能?

c# - .net 4.6 项目中缺少 XML 文档注释的枚举类

c# - IIS 上的 asp.net 应用程序无法连接到 localdb

ASP.NET Web 部署失败;项目中不存在 AddScheduledJob

c# - 在 C# 中调用 super 构造函数

c# - 在 wpf 程序中包含数据库的最佳方法?

c# - 是否可以在 ASP.NET 中保留页面之间的 View 状态?

c# - SystemSounds.Asterisk.Play()在发布后无法正常工作

sql-server - 重命名 Identity 表并导致 EF6 迁移失败