36

ASP.NET MVC アプリケーションでデータベースの更新が成功したことを確認するメッセージを表示する必要があります。現在、エラーが発生した場合、アプリケーションは (ValidationSummary ヘルパーを使用して) メッセージのみを表示します。操作が成功すると、アプリケーションは現在、ナビゲーションの適切なポイントにリダイレクトします。

目標は次のとおりです。

  • 確認メッセージを適切な方法で表示する
  • メッセージを読んだ後に続行するために必要なユーザー アクションを最小限に抑える
  • メッセージを表示するための余分な投稿/往復を避ける
  • アプリケーションの複数のポイントにメッセージを挿入する開発作業とリスクを最小限に抑える

私の好みは、送信ボタンの近くにある種のツール ヒント タイプのメッセージを表示し、メッセージを削除して、成功後に既存のリダイレクトを続行するメカニズムです。

これは、フォームを送信するための既存の HTTP POST ではなく、Ajax 呼び出しを示唆しているようです。これについてどうすればいいですか?

4

4 に答える 4

61

私は使うだろうTempData["key"]

これは似ViewData["key"]ていますが、データは次のHttpRequestのために保持され、この後asp.netによって自動的に破棄されます

だからあなたはこれを行うことができます。

コントローラのアクション

[HttpPost]
public ActionResult SomePostAction(SomeViewModel vm)
{
   if(ModelState.IsValid) // Is User Input Valid?
   {
       try
       {
           CommitData();
           TempData["UserMessage"] = new MessageVM() { CssClassName = "alert-sucess", Title = "Success!", Message = "Operation Done." };
           return RedirectToAction("Success");
       }
       catch(Exception e)
       {
           TempData["UserMessage"] =  new MessageVM() { CssClassName = "alert-error", Title = "Error!", Message = "Operation Failed." };
           return RedirectToAction("Error");
       }

   }

   return View(vm); // Return View Model with model state errors
}

_Layout.cshtml

<!DOCTYPE html>
   <html>
     <head>

     </head>
     <body>
      @if(TempData["UserMessage"] != null)
      { 
          var message = (MessageVM)TempData["UserMessage"];
          <div class="alert @message.CssClassName">
               <strong>@message.Title</strong> 
               @message.Message
          </div>
      }
          @RenderBody()
     </body>
</html>

詳細:http ://www.devcurry.com/2012/05/what-is-aspnet-mvc-tempdata.html

于 2012-11-25T10:47:35.553 に答える
16

操作が成功したら、成功メッセージの説明を次のように ViewBag に保存するだけです

ViewBag.successMessage="Success" 

次に、ビューでViewBag値がnullかどうかを確認しますか? javascript を介して、null でない場合はメッセージを Div に表示します

if('@ViewBag.successMessage'!="")
{
   $('#divSuccessMessage').show();
} 
else
{
  $('#divSuccessMessage').hide();
}

ページ読み込みのデフォルトでdivを非表示

于 2012-11-25T07:21:17.080 に答える
1

次のリンクが役立つ場合があります(より良い説明が必要なため、リンクを投稿してください):

http://msdn.microsoft.com/en-us/magazine/ff797575.aspx

http://ofps.oreilly.com/titles/9781449320317/ch_AJAX.html

于 2012-11-24T12:39:46.753 に答える