视图模型如何减少我视图中的代码和逻辑

本文关键字:视图 代码 模型 何减少 | 更新日期: 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-->
}

现在,我的观点有几十个条件,就像以前一样。视图模型如何帮助我减少视图的代码,使其不包含ifforeach块形式的逻辑?

视图模型如何减少我视图中的代码和逻辑

你可以执行以下操作:

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)

这样,您将分别处理每个部分的演变......而且很可能您的复杂视图比每个部分的更改更少。