0

ビューにエラーを表示するための標準的な方法はありますか?現在、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クラス

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 PackageMVCFLASHをチェックアウトできます

于 2013-01-10T14:28:22.397 に答える