3

POST 後のフィードバック メッセージへの適切なアプローチを見つけようとしています。

たとえば、私はこれらの方法を持っています

    public ActionResult Index(int id)
    {
        Model model = getModel(id);           

        return View(model);
    }

    [HttpPost]
    public ActionResult Save(Model model)
    {

        Result result = saveModel(result)

        if (Result.Status != Status.SUCCESS)
        {
            ...
        }
        else if(Result.Status != Status.FAILURE)
        {
            ...
        }else
        {
            ...
        }
        return RedirectToAction("Index");
    }

Result クラスには message プロパティがあります

        public class Result
        {
           ...
           public string Message{get;set;}
        }

したがって、.../Controller/Index/1 を呼び出すと、インデックス ビューが表示され、このビューには [保存アクション] を呼び出す送信ボタンがありますが、ビジネス レイヤーで問題が発生した場合は、エラー/警告メッセージを表示したいと考えています。

この状況を解決するための最善のアプローチは何ですか?

メッセージをIndex Viewに転送するために、TempDataを推奨する記事とViewDataを推奨する記事を読みました。

4

2 に答える 2

6

私が開発した 1 つのプロジェクトの ChangePassword アクションの例を共有しましょう。

[HttpPost]
public ActionResult ChangePassword(LoginModel model)
{
    if (ModelState.IsValid && _userService.ChangePassword(model.Password, model.NewPassword))
        ViewBag.SuccessMessage = UI.PasswordChanged;
    else
        ModelState.AddModelError("Password", ErrorMessages.InvalidPassword);
    return View(model);
}

別のアクションにリダイレクトしている場合、ViewBag は機能しないことに注意してください。1 つの要求で情報を保持する場合は、TempData を使用する必要があります。

于 2013-01-25T18:18:56.703 に答える
2

失敗した場合は、使用する必要があります

ModelState.AddModelError("", "The error message");

自動的にピックアップされるためHtml.ValidationSummary(true)(すべてのビューに自動的に追加されます)

通知には、TempDataまたは のいずれかを使用できますViewBag

ただし、すべてをリダイレクトすることはお勧めしません。代わりに、エラーを修正する機会をユーザーに与えます (エラーを生成するのがビジネス層であっても)。次のようなものを使用します。

[HttpPost]
public ActionResult Save(Model model)
{
    if (!ModelState.IsValid)
        return View(model);


    Result result = saveModel(result)
    if (Result.Status == Status.SUCCESS)
        return RedirectToAction("Index");

    if (Result.Status != Status.FAILURE)
    {
        ModelState.AddModelError("", "Ooops, failed");
    }
    else
    {
        ModelState.AddModelError("", "Some other error");
    }

    return View(model)
}
于 2013-01-25T18:18:51.160 に答える