我从商店程序结果中获取多个表。我希望将所有表作为ajax响应在asp.Net MVC中作为JsonResult返回。但我没有得到console.log(response);
的答复。如何在MVC控制器中将多个表作为Jsonresult返回?
我的调试器进入方法并从存储过程中获取数据并作为Json返回但在控制台之后我收到错误,如下所示
在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 :(得分:0)
像这样的整页错误,在地址栏中显示您的操作的URL,表示它回发并且不使用ajax(或者可能并行执行)。
首先检查浏览器的控制台是否有任何阻止脚本执行的脚本错误。
然后检查您的&#34;点击&#34;事件实际运行(第一行的简单alert
是最简单的方法)。
第三,如果上述两个测试都通过,那么您可能需要在事件处理程序的第一行写e.preventDefault();
,以防止默认的回发行为。如果您的按钮是&#34;提交&#34;按钮(<input type="submit"
或<button where either there's no type ("submit" is then default) or
类型=&#34;提交&#34;`包括在内) - 因为否则它将执行标准回发以及ajax请求。一旦回发开始并离开原始页面,则ajax请求被取消并且响应未被处理(因为由于回发,它在浏览器中不再存在它所启动的页面。)
答案 1 :(得分: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>