MVC.ViewBag错了?

时间:2014-07-08 12:57:36

标签: asp.net-mvc razor viewbag

我正在使用

ViewBag.Something = session.Query<Something>().ToList();

将类Something中的信息传递给View并在selectList

中使用它
  

@ Html.DropDownListFor(model =&gt; model.model,new   SelectList(ViewBag.Something,“Id”,“name”),“ - Something - ”)

那不好吗?我怎样才能改变它?

2 个答案:

答案 0 :(得分:0)

我更喜欢将所有属性添加到视图模型中,但ViewBag可用于添加不太适合模型的内容。它在绑定到布局中的元素时也很有用,因为它无法访问视图模型。

答案 1 :(得分:0)

这种做法并不是很糟糕,但建议我们在自己的模式下使用List属性。在你的情况下像

public ActinResult YourActionMethod()
{
    YourModelObject.Something = session.Query<Something>().ToList();
    // And return your view after further code statements
    return View(YourModelObject);
}

实际上,您可以创建SelectList对象,而不是原始列表对象,您可以在其中轻松绑定键和值并将其发送到视图。通过这种方式,您可以一次性添加所有业务并构建模型,并可以从您想要的位置填充它。后来View将只使用该模型而不是应用更多智能。它有很多帮助,因为所有的值都存在于同一个对象下,而不是模型中的某些值和ViewBag中的某些值。

如果您不在多个地方拥有此列表,并且您没有在任何视图中重复使用此模型,那么这种做法也很好。此外,如果您想在视图外访问此属性,例如在布局或某些父视图中消耗您的视图。

您可以查看以下帖子,其中介绍了如何将列表绑定到模型。

<强> Setting default selected value of selectlist inside an editor template