在MVC中使用ViewModels和Create操作的正确方法

时间:2013-02-15 02:52:07

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我的控制器中有以下内容:

[HttpGet]
public ActionResult Create(int setId)
{
    // create new viewModel
    var model = new CreateCardViewModel() {SetId = setId, Sides = new List<string>(){"Front Side", "Back Side"}};

    return View(model);
}

我应该将int传递给CreateCardViewModel来构建模型吗?或者这种方法是否合适?

ViewModels经常包含业务逻辑吗?

2 个答案:

答案 0 :(得分:0)

ViewModel不包含业务逻辑。它们基本上是一个输出到视图的虚拟类。

我不会说有一种“正确”的方式来加载ViewModel,但有多种方法可以做到这一点。我个人在viewmodel的构造函数方法中为页面加载任何默认值,并在控制器中加载任何页面特定的东西,就像在你的例子中一样。

我还使用基本视图模型,该视图模型被设置为_layout页面的模型。这包含诸如你的页面标题/元内容等等。

e.g。

public abstract class BaseViewModel
{
    public string Title {get;set;}

}

public sealed class HomeViewModel : BaseViewModel
{
    public string HomeText {get;set;}
}

我不相信有正确或错误的方式,只使用你觉得舒服的技术。

答案 1 :(得分:0)

如果要确保在一个位置创建对象,则构造函数很有用。它们有助于避免在无效状态下初始化对象的情况(例如,您忘记设置其中一个对象属性,这是进一步处理所必需的)。在视图模型的情况下,拥有输出模型的构造函数是很好的。但是你不能将构造函数用于输入模型(操作方法的参数),因为它们是由需要公共构造函数的MVC运行时反序列化的。