我的控制器中有以下内容:
[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经常包含业务逻辑吗?
答案 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运行时反序列化的。