【问题标题】:Mvc, Selectlist selected object valuemvc, Selectlist 选定对象值
【发布时间】:2017-05-02 12:15:05
【问题描述】:

我有这个选择列表:

控制器:

 ViewBag.SagId = new SelectList(db.Sags, "Id", "Emne", 7);

list 一切正常,但选择的值不是 == 7,

查看:

 @Html.DropDownListFor(x => x.SagId,(IEnumerable<SelectListItem>) ViewBag.SagId,
new
{

    @class = "selectpickers",
    data_show_subtext = "true",
    data_live_search = "true"

})

这可能是我错过的一些愚蠢的事情?

【问题讨论】:

  • 模型绑定通过绑定到您的属性值来工作。在将模型传递给视图之前,在 GET 方法中将 SagId 的值设置为 7,它将被选中。绑定到属性时,SelectList 构造函数的第 4 个参数将被忽略
  • 我不希望它总是 7,只是一个测试希望它是一个可以根据他们访问的站点而改变的 int。
  • 实际值是多少并不重要。您需要设置属性 SagId 的值,如果它与其中一个选项值匹配,它将被选中(否则将选择第一个选项,因为必须这样做) - 这就是模型绑定的工作原理。
  • 嗯,SagsId 上有一个值 = 7。首先认为我也在寻找。
  • 所以你是说,我应该在我的get中设置它?你会怎么做?

标签: asp.net-mvc razor


【解决方案1】:

模型绑定通过绑定到模型属性的值来工作。在将模型传递给视图之前,您需要在控制器中设置属性SagId 的值。

您的控制器方法中的代码应该类似于

var model = new YourModel()
{
    SagId = 7
};
ViewBag.SagId = new SelectList(db.Sags, "Id", "Emne");
return View(model);

请注意,在SelectList 构造函数中设置第四个参数没有意义。绑定到模型属性时会忽略它,因为在内部 DropDownListFor() 方法会构建自己的 IEnumerable&lt;SelectListItem&gt; 并根据您绑定到的属性的值设置 Selected 属性。

还请注意,您不应为绑定到的属性使用相同的名称(请参阅Can the ViewBag name be the same as the Model property name in a DropDownList?),我强烈建议您使用视图模型,尤其是在编辑时,并且该视图模型将包含一个属性@ 987654328@,在视图中它将是@Html.DropDownListFor(m =&gt; m.SagId, Model.SagList, new { ... })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多