2017-09-13 29 views
0

我從存儲過程結果中獲取多個表。我想把這個全部表作爲asp.netNet MVC中的JsonResult作爲ajax響應返回。但我沒有在console.log(response);得到回覆。如何在MVC控制器中將多個表作爲JsonResult返回?如何在asp.net MVC中將多個表返回爲jsonreult?

我調試進入方法和存儲過程中獲取數據並返回爲JSON但隨後後控制檯我得到錯誤的波紋管,

enter image description here

在Ajax請求,我有打電話GetKYCListForUpdate方法如波紋管,

$('#KycListTable tbody').on('click', '.btn-edit', function (e) { 
     var data = table.row($(this).parents('tr')).data(); 

     if (data.PartyBillId != null) { 
      $.ajax({ 
       type: "POST", 
       url: "@Url.Action("GetKYCListForUpdate", "KYCRegistration")", 
       data: { id: data.PartyBillId }, 
       success: function (response) { 
        debugger 
        console.log(response); 
        var result = response.aaData; 
        if (result != null) { 
         $.each(result, function (i, item) { 
          console.log(item) 
         }); 
        } 
       } 
      }); 
     } 
    }); 
在asp.net MVC的控制器方法如波紋管

public JsonResult GetKYCListForUpdate(int id) 
    { 
     var AuthId = NC.ToInt(((Variables.scUserDetail)Session["UserDetail"]).AuthId); 
     SqlConnection objsql = default(SqlConnection); 
     objsql = new SqlConnection(Connect.GetConnStr(1)); 

     DataSet dsData = new DataSet(); 
     SqlCommand objSelectCmd = new SqlCommand(); 
     try 
     { 
      //objsql.ConnectionString = objsql; 
      objsql.Open(); 
      objSelectCmd.CommandType = CommandType.StoredProcedure; 
      objSelectCmd.Connection = objsql; 
      objSelectCmd.CommandText = "Sp_M35_01_GetKycListToEdit"; 
      objSelectCmd.Parameters.AddWithValue("@BillPartyId", id); 
      objSelectCmd.Parameters.AddWithValue("@AuthId", AuthId); 

      SqlDataAdapter objDataAdapter = new SqlDataAdapter(); 
      objDataAdapter = new SqlDataAdapter(objSelectCmd); 
      objDataAdapter.Fill(dsData); 


      for (int i = 0; i < dsData.Tables.Count; i++) 
      { 
       if (dsData.Tables[i].Rows.Count > 0) 
       { 

        result.Add(GetTableRows(dsData.Tables[i])); 
       } 
      } 

    return Json(new { aaData = result }, JsonRequestBehavior.AllowGet); 
} 

public List<Dictionary<string, object>> GetTableRows(DataTable dtData) 
    { 
     List<Dictionary<string, object>> 
     lstRows = new List<Dictionary<string, object>>(); 
     Dictionary<string, object> dictRow = null; 

     foreach (DataRow dr in dtData.Rows) 
     { 
      dictRow = new Dictionary<string, object>(); 
      foreach (DataColumn col in dtData.Columns) 
      { 
       dictRow.Add(col.ColumnName, dr[col]); 
      } 
      lstRows.Add(dictRow); 
     } 
     return lstRows; 
    } 
+0

我想'VAR數據= table.row($(本)。家長( 'TR'))。 data();'需要:var data = $(this).parent('tr')。data();' –

+1

根據錯誤,Action方法'GetKYCListForUpdate'沒有獲得ID參數。檢查data.PartyBillId是否爲有效num – TechGirl

+0

正如@ TechGirl所說,錯誤指出你沒有向控制器發送'id' oparameter。所以請檢查你發送的內容。 –

回答

0

這樣一個完整的頁面錯誤,在您的地址欄中顯示您的操作的URL,表示它正在回發並且未使用ajax(或可能並行執行)。

  • 首先檢查您的瀏覽器的控制檯是否有任何腳本錯誤阻止腳本執行。

  • 其次確認您的「點擊」事件實際運行(簡單的alert在它的第一行是最簡單的方法)。

  • 第三,如果上述兩個測試都通過了,那麼您可能需要在事件處理程序的第一行編寫e.preventDefault();以防止默認的回發行爲。如果您的按鈕是一個「提交」按鈕(包括<input type="submit"<button where either there's no type ("submit" is then default) or type =「submit」) - 因爲否則它將執行標準回發以及ajax請求。回發完成並離開原始頁面後,ajax請求將被取消,並且響應不會得到處理(因爲發佈的頁面由於回發而不再存在於瀏覽器中)。

0

我已經通過修改內容爲波紋管解決的問題,

我已經把jsonResult.MaxJsonLength = int.MaxValue;線。

public JsonResult GetKYCListForUpdate(int id) 
{ 
    var AuthId = NC.ToInt(((Variables.scUserDetail)Session["UserDetail"]).AuthId); 
    SqlConnection objsql = default(SqlConnection); 
    objsql = new SqlConnection(Connect.GetConnStr(1)); 

    DataSet dsData = new DataSet(); 
    SqlCommand objSelectCmd = new SqlCommand(); 
    try 
    { 
     //objsql.ConnectionString = objsql; 
     objsql.Open(); 
     objSelectCmd.CommandType = CommandType.StoredProcedure; 
     objSelectCmd.Connection = objsql; 
     objSelectCmd.CommandText = "Sp_M35_01_GetKycListToEdit"; 
     objSelectCmd.Parameters.AddWithValue("@BillPartyId", id); 
     objSelectCmd.Parameters.AddWithValue("@AuthId", AuthId); 

     SqlDataAdapter objDataAdapter = new SqlDataAdapter(); 
     objDataAdapter = new SqlDataAdapter(objSelectCmd); 
     objDataAdapter.Fill(dsData); 


     for (int i = 0; i < dsData.Tables.Count; i++) 
     { 
      if (dsData.Tables[i].Rows.Count > 0) 
      { 

       result.Add(GetTableRows(dsData.Tables[i])); 
      } 
     } 

var jsonResult = Json(new{ result }, JsonRequestBehavior.AllowGet); 

      jsonResult.MaxJsonLength = int.MaxValue; 
      return jsonResult; 
} 

,並在web.config中,我設置了maxJsonLength

<system.web.extensions> 
<scripting> 
    <webServices> 
    <jsonSerialization maxJsonLength="50000000"/> 
    </webServices> 
</scripting> 

相關問題