error-handling - 在 View 中显示错误

标签 error-handling asp.net-mvc-4 partial-views

是否有任何标准做法来在 View 中显示错误?当前正在从TempData中显示它。

我从Base Controller实现了一个派生类,并在我的每个 Controller 中使用了该派生类。然后分配来自 Controller 的错误或成功消息。

public class TestController : Controller
{
    public string ErrorMessage
    {
        get { return (string) TempData[CommonHelper.ErrorMessageKey]; }

        set
        {
            if (TempData.ContainsKey(CommonHelper.ErrorMessageKey))
            {
                TempData[CommonHelper.ErrorMessageKey] = value;
            }
            else
            {
                TempData.Add(CommonHelper.ErrorMessageKey,value);
            }

            TempData.Remove(CommonHelper.SuccessMessageKey);
        }
    }

    public string SuccessMessage
    {
        get { return (string)TempData[CommonHelper.SuccessMessageKey]; }

        set
        {
            if(TempData.ContainsKey(CommonHelper.SuccessMessageKey))
            {
                TempData[CommonHelper.SuccessMessageKey] = value;
            }
            else
            {
                TempData.Add(CommonHelper.SuccessMessageKey, value);
            }

            TempData.Remove(CommonHelper.ErrorMessageKey);
        }
    }
}

CommonHelper类
public class CommonHelper
{

    public const string SuccessMessageKey = "successMessage";

    public const string ErrorMessageKey = "errorMessage";


    public static string GetSuccessMessage(object data)
    {
        return data == null ? string.Empty : (string) data;
    }


    public static string GetErrorMessage(object data)
    {
        return data == null ? string.Empty : (string) data;
    }

}

然后创建具有此的局部 View
@using Web.Helpers

@if (!string.IsNullOrEmpty(CommonHelper.GetSuccessMessage(TempData[CommonHelper.SuccessMessageKey])))
{
<div class="alert alert-success">
    @CommonHelper.GetSuccessMessage(TempData[CommonHelper.SuccessMessageKey])
</div>
}
else if   (!string.IsNullOrEmpty(CommonHelper.GetErrorMessage(TempData[CommonHelper.ErrorMessageKey])))
{
<div class="alert alert-success">
    @CommonHelper.GetErrorMessage(TempData[CommonHelper.ErrorMessageKey])
</div>
}

并且在每个 View 中都会渲染部分 View 。
<div>
        @Html.Partial("_Message")
    </div>

最佳答案

这是显示错误的一种非常常见的实现。

控制者

public class UserController : Controller 
{
     [HttpPost]
     public ActionResult Create(User model)
     {
         //  Example of manual validation            
         if(model.Username == "Admin")
         {
            ModelState.AddModelError("AdminError", "Sorry, username can't be admin")
         }

         if(!ModelState.IsValid() 
         {
            return View(model)
         }
     }
}

模型
public class User
{
    [Required]
    public string Username {get; set;}

    public string Name {get; set; }
}

View
@Html.ValidationSummary(true)
@using(Html.BeginForm())
{
   // Form Html here 
}

您不需要所有创建的基础架构。这由框架处理。如果您需要添加成功消息的方法,则可以 checkout Nuget软件包MVC FLASH

关于error-handling - 在 View 中显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250809/

相关文章:

c++ - 为什么编译器说 'Illegal use of floating point'?

swift - 如何在 MVVM 中使用 RxSwift 正确处理来自 api 请求的错误?

c# - 使用 Lambda 或 Linq 为 MVC5 中的 Razor View 创建带有所选项目的 SelectList 模型

asp.net-mvc-4 - 完成未绑定(bind)的 MVC 模型属性的最佳实践?

javascript - 部分 html Controller Angular

php - 如何识别 ldap_bind() 上的不同错误? PHP

exception - 在CUDA内核中触发运行时错误

c# - 使用 MVC 站点地图时,如何更改面包屑中的父级父级?

jquery - asp.net mvc jquery - 显示部分页面作为返回结果?

ruby-on-rails - 如何在 ruby​​ on rails 中将一个 Controller 的部分 View 渲染到另一个 Controller