在视图中显示错误

时间:2013-01-10 04:24:34

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

是否有任何标准做法可在视图中显示错误?目前它正在从TempData中显示。

我从Base 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 Class

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

}

然后创建了具有此

的部分视图
@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>
}

在每个视图中,都会呈现局部视图。

<div>
        @Html.Partial("_Message")
    </div>

2 个答案:

答案 0 :(得分:1)

我更喜欢使用ModelState.AddModelError()

答案 1 :(得分:1)

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

控制器

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

查看

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

您不需要您创建的所有基础架构。这由框架处理。如果您需要一种方法来添加成功消息,可以查看Nuget Package MVC FLASH