c# - ViewModel 如何减少我 View 中的代码和逻辑?

标签 c# asp.net-mvc razor

<分区>

我有一个使用 C# 和 Razor 引擎的 MVC5 项目。

我的一个观点,很大,ans有几百行代码,很难管理。 在之前的一篇文章中,这个社区建议我应该从我的 View 中删除逻辑并使用 ViewModel 来代替该逻辑。

但是,我看不出这对我有什么帮助。我的 View 会根据查看者的不同显示不同的信息:

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-->
}

现在,我的 View 有几十个像以前那样的条件。 View 模型如何帮助我减少 View 的代码,使其不包含 ifforeach block 形式的逻辑?

最佳答案

你可以这样做:

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;
        }
    }
}

View 模型对于聚合数据和条件很有用。您可以为其指定有意义的属性名称,以便于在 View 中进行跟踪。

关于c# - ViewModel 如何减少我 View 中的代码和逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429051/

相关文章:

asp.net-mvc - MVC Razor 表单提交不工作

asp.net-mvc-3 - web.config 中的 httperrors

c# - 当您在小时中得到小数时,时间跨度意味着什么。例如43.02 :10:00 and how do I avoid it

.net - ASP.NET MVC - 跨 View 传递数据

asp.net-mvc - 如何使用 jqgrid 和 http 方法 POST 将额外的参数传递给服务器?

c# - 选择列表返回 System.Data.Entity.DynamixProxies 而不是 MVC asp.net C# 中的值

c# - 如何在 C# 中为 LambdaExpression 组合 MemberExpression 实例?

c# - 使用 C# 创建 Excel 表格的最简单方法是什么?

c# - 使用 lambda 构建器模式

c# - 带有 cookie 身份验证的 ASP.Net Core 2.2 : how to avoid page redirect when not authorized for API only controllers