Asp.Net MVC设置ViewModel属性值
本文关键字:属性 ViewModel 设置 Net MVC Asp | 更新日期: 2023-09-27 18:12:01
我有一种情况,我必须根据某些情况更新视图模型属性。要更新的viewmodel属性是基于IsPrintableFlag()结果的IsPrintable。目前我正在更新属性从控制器喜欢模型。IsPrintable = model。IsPrintableFlag(项目,页面);
我的问题是而不是更新视图模型属性从控制器,我们有选项来设置属性值在视图模型?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);
视图模型不应该真正包含逻辑,它应该只包含视图所需的数据。在控制器中填充视图模型是可以的。
我建议你引入一个服务层来封装这种类型的逻辑,例如
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;
}
我找到了我的问题的答案,想分享一下,以便对许多可能面临类似问题的人有用。
你甚至可以在你的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);