2016-09-02 7 views
0

DBテーブルからレコードを削除する関数を実装しました。エラーがあれば、ViewBagに渡したいと思います。しかし、ViewBag値はビューに渡されません。ビューASP.Net MVC ViewBagはAJAXによって呼び出される関数では機能しません

function DeleteSelectedRecord() { 
    var SelectedName = $("#lstItems").val() 
    $.ajax({ 
     url: 'DeleteRecord', 
     method: "POST", 
     data: { name: SelectedName } 
    }).done(function() { 
     $("#lstItems").empty(); 
     Search(); 
     GetCount(); 
     $('#modalDeleted').modal('show'); 
     setTimeout(function() { $('#modalDeleted').modal('hide'); }, 2000); 
    }); 
} 

コントローラ

[HttpPost] 
    public ActionResult DeleteRecord(string name) 
    { 
     try 
     { 
      if (!(string.IsNullOrEmpty(name))) 
      { 
       driver_tab driver = db.driver_tab.SingleOrDefault(m => m.Name == name); 
       db.driver_tab.Remove(driver); 
       db.SaveChanges(); 
       ViewBag.Msg = "1"; 
       MessageBox.Show(ViewBag.Msg); 
       return View("Main"); 
      } 
      else 
      { 
       ViewBag.Msg = "2"; 
       return View("Main"); 
      } 
     } 
     catch (DbEntityValidationException ex) 
     { 
      ViewBag.Msg = ex.Message.ToString(); 
      return View("Main"); 
     } 
     catch (Exception ex2) 
     { 
      ViewBag.Msg = ex2.Message; 
      return View("Main"); 
     } 
    } 

のAjax機能は、私はこの<h2>@ViewBag.Msg 気に入りにこのViewBag.Msgを使用しかし、それは動作しません。 私のコードの問題点は何ですか?

delete関数を実行した後にコントローラにエラーが発生した場合、そのメッセージをビューに渡して表示したいとします。それを達成する方法..?

+0

あなたはMessageBox.Showを削除してくださいでした(ViewBag .Msg); ステートメントと試してみませんか? –

答えて

0

あなたはこのようなTempData使用する必要があります別のアクションにリダイレクトされている場合:

catch (DbEntityValidationException ex) 
{ 
    TempData["error"] = ex.Message.ToString(); 
    return View("Main"); 
} 

そして、あなたのビューで:

<h2>@Html.Display(TempData["error"])</h2 
1

あなたはAJAXがDeleteRecordからの応答を使用していないですが。これは、ViewBagデータを含むレンダリングビューHTMLを含むものです。

何かのように:あなたが戻ってきているよう

$.ajax({ 
    url: 'DeleteRecord', 
    method: "POST", 
    data: { name: SelectedName } 
}).done(function (data) { 
    // Do something with response data, for example: 
    $('#modalDeleted').html(data); 
}); 
0

が見える

は、あなたは、私は、これはあなたが表示するモーダルを移入する必要があると考えているあなたのコードを見て、応答を使用するようにはJavaScriptを更新する必要があります別のアクション、つまりDeleteRecordアクションメソッドからメインアクションメソッドにリダイレクトする場合は、ViewBagではなくTempDataを使用する必要があります。

0

あなたはajax POSTを実行しており、ajaxを使用してサーバー側からリダイレクト/ビューの変更を行うことはできません。あなたの場合、ajax成功コールバックの結果、つまり `done(function(data){....});をチェックすると、あなたのActionメソッドから返されるものが得られるはずです。ここではレンダリングされますメインビューのhtml。

アイデアがView resultを返す代わりにJson resultを返し、その後、戻って削除アクションからの応答を取得する場合:

[HttpPost] 
public JsonResult DeleteRecord(string name) 
{ 
    ..... 
    return Json(new {message = "your message based on business rule" }, JsonRequestBehavior.AllowGet); 

} 

とJavaScriptで

function DeleteSelectedRecord() { 
    var SelectedName = $("#lstItems").val() 
    $.ajax({ 
     url: 'DeleteRecord', 
     method: "POST", 
     data: { name: SelectedName } 
    }).done(function (result) { 

     //append this message to any container of your view 
     var message = result.message; 

     $("#lstItems").empty(); 
     Search(); 
     GetCount(); 
     $('#modalDeleted').modal('show'); 
     setTimeout(function() { $('#modalDeleted').modal('hide'); }, 2000); 
    }); 
} 
関連する問題