【发布时间】:2017-04-03 11:08:24
【问题描述】:
是否可以在 ViewModels getter 中使用简单的逻辑(没有任何依赖关系),或者它应该只包含自动属性?在这种情况下,只需检查 null,因此每次使用此 ViewModel 时我都不必在控制器中执行此操作。 TicketSearchParameters 是一个包含字符串和日期属性的简单模型,没有 Repository 或任何其他依赖项。
public class MyViewModel
{
private TicketSearchParameters _searchParams;
public TicketSearchParameters SearchParams
{
get
{
if (_searchParams == null)
{
_searchParams = new TicketSearchParameters();
_searchParams.CreatedFrom = DateTime.Now.AddDays(-7);
_searchParams.CreatedTo = DateTime.Now;
}
return _searchParams;
}
set
{
_searchParams = value;
}
}
/*** other properties ***/
}
【问题讨论】:
-
如果你想设置默认值,这就是构造函数的用途 -
public MyViewModel(){ SearchParams = new TicketSearchParameters(){ CreatedFrom = DateTime.Now.AddDays(-7), CreatedTo = DateTime.Now }; } -
@StephenMuecke 那么问题来了,可以在 ViewModel 构造函数中使用这种逻辑吗?
-
是的,当然。
-
@StephenMuecke 谢谢,我问的是因为有人说模型根本不应该有任何逻辑,所有逻辑都应该在控制器中处理。你可以写一个与这一切相关的答案,我会接受的。
-
这里没有对错之分。这三个都可以工作,但是默认构造函数的目的是初始化模型中的默认值(如果你没有其他的,编译器无论如何都会创建一个)。这意味着保持它干燥(假设你总是想要那些默认值,每次你想初始化你的模型时不要在控制器中重复该代码)
标签: asp.net-mvc viewmodel asp.net-mvc-viewmodel