【问题标题】:Show different View Data in view with different class in ASP.NET Core在 ASP.NET Core 中使用不同的类在视图中显示不同的视图数据
【发布时间】:2022-09-24 01:37:19
【问题描述】:

这是我的控制器:

  public async Task<IActionResult>ActiveEmailAccount(EmailActiveAccountViewModel active)
    {
        if (ModelState.IsValid)

        {
            var result = await _userService.ActiveAccount(active);
            switch (result)
            {
                case ActiveEmailResult.Error:
                    ModelState.AddModelError(\"CustomError\", \"You Have Error \");
                    break;

                case ActiveEmailResult.NotActive:
                    ModelState.AddModelError(\"CustomError\", \"You Are not Active. \");
                    break;

                case ActiveEmailResult.Success:
                    ModelState.AddModelError(\"CustomError\", \"You Are Active \");
                 
                    break;
            }

            ViewData[\"Active\"] = result;
        }

        return View(active);

}

我想在视图中显示查看数据的结果。 我知道它是

<p> @(ViewData[\"Active\"] </P>

我想知道如何在不同班级的不同状态下显示这些结果?

例如,如果成功:with class=\"alert-success\"

如果没有在类 alert-danger 中处于活动状态......

    标签: asp.net-core view actionresult viewdata


    【解决方案1】:

    在您的操作中的 switch-case 语句中,您可以为每个案例设置一个带有警报类的 ViewData 条目:

    public async Task<IActionResult> ActiveEmailAccount(EmailActiveAccountViewModel active)
    {
        if (ModelState.IsValid)
        {
            var result = await _userService.ActiveAccount(active);
    
            switch (result)
            {
                case ActiveEmailResult.Error:
                    ModelState.AddModelError("CustomError", "You Have Error ");
                    ViewData["AlertClass"] = "alert-danger";
                    break;
    
                case ActiveEmailResult.NotActive:
                    ModelState.AddModelError("CustomError", "You Are not Active. ");
                    ViewData["AlertClass"] = "alert-warning";
                    break;
    
                case ActiveEmailResult.Success:
                    ModelState.AddModelError("CustomError", "You Are Active ");
                    ViewData["AlertClass"] = "alert-success";
                    break;
            }
    
            // this is not needed for this scenario
            //ViewData["Active"] = result;
        }
    
        return View(active);
    }
    

    然后在您的视图中,您可以使用Html.ValidationMessage html helper 获取模型状态消息并使用ViewData 获取警报类:

    <div class="alert @ViewData["AlertClass"]">
        @Html.ValidationMessage("CustomError")
    </div>
    

    剃须刀解决方案:

    您可以在视图中使用 switch-case 语句:

    @switch ((ActiveEmailResult)ViewData["Active"])
    {
        case ActiveEmailResult.Error:
            <div class="alert alert-danger">You Have Error </div>
            break;
    
        case ActiveEmailResult.NotActive:
            <div class="alert alert-warning">You Are not Active. </div>
            break;
    
        case ActiveEmailResult.Success:
            <div class="alert alert-success">You Are Active </div>
            break;
    }
    

    【讨论】:

    • 它不起作用,ActiveEmailResult 有 3 个结果,我想知道,我应该如何在视图上检查它,我的视图有 @model AryanITC.Domain.ViewModels.Account.EmailActiveAccountViewModel
    • @Dimitris_Maragkos 它有效,但我有一个问题。如果我在控制器中控制它,我也应该在视图中控制它吗?在这种情况下,控制器中的错误按摩怎么样?我想在控制器上准确显示该消息
    • 它不再起作用了。我知道,我必须投射视图数据?但是因为我在视图数据的概念上存在问题,所以我不知道如何转换它?以及如何在视图上进行比较?
    • 如果你按照我上面展示的方法,你不需要投射任何东西。究竟是什么不工作?
    • @dimitris_maragkos @Html.ValidationMessage("CustomError") 它与此代码一起使用并在枚举结果中准确显示该消息,但我想显示具有不同类的消息,例如,如果在类成功类中显示成功,如果错误,则显示危险等级……喜欢。
    猜你喜欢
    • 1970-01-01
    • 2021-05-28
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多