视图模型如何减少我视图中的代码和逻辑
本文关键字:视图 代码 模型 何减少 | 更新日期: 2023-09-27 18:33:56
我在MVC5中有一个带有C#和Razor Engine的项目。
我的观点之一是巨大的,ans有数百行代码,因此很难管理。在之前的一篇文章中,这个社区建议我应该从我的视图中删除逻辑,并使用视图模型来代替该逻辑。
但是,我看不出这对我有什么帮助。"我的视图"根据查看者显示不同的信息:
if ((User.isHelpDesk && Model.MaterialStatusId == MatStatus.A1HelpDeskProductProposal) || (User.isProcurement && Model.MaterialStatusId == MatStatus.A4PurchasingDptValidation))
{
<!-- Show something here -->
}
else if (User.isHelpDesk || User.isProcurement || User.isDirector || User.isManager)
{
<!-- Show some other thing here-->
}
现在,我的观点有几十个条件,就像以前一样。视图模型如何帮助我减少视图的代码,使其不包含if
和foreach
块形式的逻辑?
你可以执行以下操作:
public class MyViewModel
{
public User User { get; set; }
public OtherModel Model { get; set; }
public bool IsSomethingHere
{
get
{
return (User.isHelpDesk && Model.MaterialStatusId == MatStatus.A1HelpDeskProductProposal) ||
(User.isProcurement && Model.MaterialStatusId == MatStatus.A4PurchasingDptValidation);
}
}
public bool IsSomethingElseHere
{
get
{
return User.isHelpDesk || User.isProcurement || User.isDirector || User.isManager;
}
}
}
视图模型可用于聚合数据和条件。您可以为其指定有意义的属性名称,以便于在视图中遵循。
添加@Beautifulcoder答案...通常,视图模型在控制器操作中加载。在那里,您可以执行所有计算,这样您的视图只需要显示您传递给它的内容。
除了使用 ViewModel 之外,您还可以在视图中拥有这种复杂的逻辑,但每个"IF"块内的标记可以放在分部视图中,并像这样调用它:
@Html.Partial("PartialName", Model)
这样,您将分别处理每个部分的演变......而且很可能您的复杂视图比每个部分的更改更少。