2013-11-23 143 views
0

我正在使用mvc4項目。我正在使用Dexexpress網格。我想要做的是當我點擊添加..我做ajax調用來檢查用戶是否在數據庫..如果沒有它保存到數據庫和..我回來的網格視圖刷新網格與最新的數據。返回值以及mvc中的部分視圖ajax調用

但我想返回一些價值太隨着gridview局部..所以我可以顯示該用戶已添加或不。

例如:對於AJAX調用

function AddUser() { 
    showProgress(); 
    $.ajax({ 
     url: 'ManageUsers/AddUsers/?id=' + Math.random(), 
     data: $("#frmManageUsers").serialize(), 
     type: 'Post', 
     datatype: 'json', 
     success: function (data) { 
      if (data != '') {     
       $("#grid").html(''); 
       $("#grid").html(data); 
      } 
      else 
       alert('No Record Found'); 
     }, 
     error: function (request, status, error) { ShowErrorMessage(); }, 
     complete: function() { hideProgress(); ShowSuccessMessage(); } 
    }); 
} 

和控制器jQuery代碼

public ActionResult AddUsers(Usertable model) 
     { 
      int successid = ManageUserExecutor.Save(model); 
      if (successid == -1) 
      { 
       List<usp_GetListOfUsers_Result> objList = new List<usp_GetListOfUsers_Result>(); 
       return PartialView("GridViewPartial", objList); 
      } 
      else 
       return RedirectToAction("GridViewPartial"); 
     } 

我要的是如果我能與GridView的部分HTML沿阿賈克斯retrun得到successid的價值...所以我可以根據其如果操作失敗顯示消息..

回答

5

,簡單地返回,作爲一個JSON結果:

public ActionResult AddUsers(Usertable model) 
{ 
    int successid = ManageUserExecutor.Save(model); 
    if (successid == -1) 
    { 
     List<usp_GetListOfUsers_Result> objList = new List<usp_GetListOfUsers_Result>(); 
     return PartialView("GridViewPartial", objList); 
    } 
    else 
    { 
     return Json(new { id = successid }); 
    } 
} 

和你的AJAX調用:

function AddUser() { 
    showProgress(); 
    $.ajax({ 
     url: 'ManageUsers/AddUsers', // <!-- TODO: This url should NOT be hardcoded like that. It should be generated by a server side helper 
     cache: false, // <!-- That's what should be used instead of reinventing wheels with Math.random stuff 
     data: $("#frmManageUsers").serialize(), 
     type: 'POST', 
     success: function (data) { 
      if (data.id) { 
       // the controller action returned a JSON result with id property => 
       // handle it here 
       alert('Sorry, an error occurred, successid: ' + data.id); 
      } else { 
       // The operation succeeded and the controller action returned a partial 
       // view => update your DOM here 
       $("#grid").html(data); 
      } 
     }), 
     error: function (request, status, error) { ShowErrorMessage(); }, 
     complete: function() { hideProgress(); ShowSuccessMessage(); } 
    }); 
} 

還要注意,我在您的要求戒掉了datatype: 'json',參數存在的。這是錯誤的2種方式:

  1. 正確的屬性稱爲dataType代替datatype
  2. 由於控制器的動作可以返回HTML或JSON(取決於操作是否成功),我們離開jQuery的使用Content-Type響應由HTTP服務器設置的網頁服務器自動推斷出正確的類型並解析data變量傳遞給您的success回調。
+0

先生..謝謝你這麼多快速和準確的答案..也爲您的緩存和網址的建議...正如你所說的url不應該硬編碼..它應該由服務器端幫手....你的意思是什麼..以及如何可以實現這一點..你可以請幫助我與此..以一些例子等...再次感謝您的幫助 – Mahajan344

+0

我的意思是你應該使用您可以在'AddUser'操作中訪問某些DOM元素屬性的'Url.Action'助手。 –

0
public ActionResult AddUsers(Usertable model) 
{ 
    var viewModel = new ReturnValue(); 

    int successid = ManageUserExecutor.Save(model); 
    if (successid == -1) 
    { 
     viewModel.Message= "Failed"; 
     viewModel.ViewString = this.RenderViewToString("GridViewPartial", objList); 
    } 
    else 
    { 
     viewModel.Message= "Success"; 
     viewModel.ViewString = this.RenderViewToString("GridViewPartial"); 
    } 
} 

並使用data.ViewString訪問渲染的局部視圖HTML。

$("#grid").html(data.ViewString); 

並使用data.Message訪問您想要的消息。

$("#grid").html(data.Message); 

你可以找到RenderViewToString函數here