我有一种情况需要根据某些情况更新视图模型属性。 要更新的viewmodel属性是基于IsPrintableFlag()结果的IsPrintable。 目前我正在从控制器更新属性 model.IsPrintable = model.IsPrintableFlag(items,pages);
我的问题是 而不是从Controller更新Viewmodel属性,我们是否可以选择在viewmodel中设置property的值?
ViewModel代码:
public bool IsPrintable { get; set; }
public bool IsPrintableFlag(IList<Items> items,IList<Pages> pages )
{
switch (id)
{
case 1:
case 2:
if (!pages.Any())
{
return pages.Any();
}
break;
case 3:
return false;
default:
return false;
}
return false;
}
控制器代码:
model.IsPrintable = model.IsPrintableFlag(items, pages);
答案 0 :(得分:1)
视图模型不应该包含逻辑,它应该只包含视图所需的数据。在控制器中填充视图模型很好。
我建议你引入一个包含这种逻辑的服务层,例如
public class MyDomainService
{
public bool IsPrintable(IList<Items> items, IList<Pages> pages)
{
return ...;
}
}
...
model.IsPrintable = domainSvc.IsPrintable(items, pages);
或者,您可以对此进行扩展以返回完全填充的视图模型
public MyViewModel GetViewModel(...)
{
var model = ...;
model.IsPrintable = this.IsPrintable(items, pages);
return model;
}
答案 1 :(得分:0)
得到我的问题的答案,并想分享,以便它可能对许多可能面临类似问题的人有用。
您甚至可以在IsPrintableFlag()方法中设置值,这样您就不需要使用以下命令返回布尔值:
// Define this method within your ViewModel class
public void SetPrintableFlag(IList<Items> items, IList<Pages> pages)
{
// Assuming id is a property of your ViewModel class
switch (id)
{
case 1:
case 2:
// If there aren't any pages
if (!pages.Any())
{
// Then set your flag to the opposite (you could likely return true here instead)
IsPrintableFlag = pages.Any();
}
break;
case 3:
default:
IsPrintableFlag = false;
}
}
控制器代码
model.SetPrintableFlag(items,pages);