如何在asp.net MVC中将多个表作为jsonreult返回?

时间:2017-09-13 11:24:52

标签: jquery ajax asp.net-mvc

我从商店程序结果中获取多个表。我希望将所有表作为ajax响应在asp.Net MVC中作为JsonResult返回。但我没有得到console.log(response);的答复。如何在MVC控制器中将多个表作为Jsonresult返回?

我的调试器进入方法并从存储过程中获取数据并作为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;
    }

2 个答案:

答案 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>