在ASP.Net MVC项目中,决定何时通过模型或ViewBag传递数据的最佳做法是什么。
在我的模型中,我通常具有用于验证实体对象的属性。
然而,在同一个Model类中,我不确定天气是不是很好的做法,然后包含与我的业务实体无关的属性,而是包含页面的布局。因此,例如,如果用户执行了ajax操作,我有许多属性可以决定天气以呈现页面的某些部分和消息。
下面是一个代码示例,以便更好地解释。
模型
public class MyModel {
[Required(ErrorMessage="The Name field is required")]
public string Name{ get; set; }
public string SaveSuccessMessage {get; set;}
}
查看
@model MyNameSpace.MyModel
<div>
Some Content......
Html.TextBoxFor(m => m.Name);
<input type="button" value="Save Changes" onclick="DoAjaxCall()">
</div>
@If(Model.SaveSuccessMessage != null)
{
<div class="myClass">
<a class="close">x</a>
Model.SaveSuccessMessage
</div>
}
当用户保存更改时,控制器必须告诉PartialView显示在服务器上生成的成功消息。我可以通过ViewBag
传递一些方法if(ViewBag.SaveSuccessMessage != null)
然而,它似乎通过模型传递它,如我的样本中所示是一个更好的选项,因为它是强类型的,我有我需要的所有数据在一个地方。但我不确定这是否违背MVC理念。
我处理我的视图的方式会导致复杂页面的非常大的模型类。是通过推荐的型号传递这样的数据吗?
答案 0 :(得分:2)
&#34;最佳实践&#34;是创建ViewModel
,其中包含Model
中的数据以及生成视图所需的任何其他数据(选择列表等)。然后将ViewModel
的结果映射回Model
。
ViewBag
是一种快捷方式,可以避免将似乎的类定义为与Model
几乎完全相同的类。在实践中,您经常会因各种原因发现自己创建ViewModel
: