0

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

我从基本控制器实现了一个派生类,并在我的每个控制器中使用了该派生类。然后从控制器分配错误或成功消息。

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

}

然后创建了一个具有这个的局部视图

@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>
4

2 回答 2

1

我更喜欢使用 ModelState.AddModelError()

于 2013-01-10T07:20:05.087 回答
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

于 2013-01-10T14:28:22.397 回答