【问题标题】:How to return multiple table as jsonreult in asp.net MVC?如何在 asp.net MVC 中将多个表作为 jsonreult 返回?
【发布时间】:2018-02-22 02:10:51
【问题描述】:

我从存储过程结果中获取了多个表。我想将此所有表作为 asp.Net MVC 中的 JsonResult 作为 ajax 响应返回。但我没有收到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;
    }

【问题讨论】:

  • 我认为var data = table.row($(this).parents('tr')).data(); 需要是:- var data = $(this).parent('tr').data();
  • 根据错误,操作方法“GetKYCListForUpdate”未获取 ID 参数。检查 data.PartyBillId 是否为有效数字
  • 正如@TechGirl 所说,错误表明您没有将id oparameter 发送到控制器。因此,请检查您发送的内容。
  • @TechGirl 我正在向方法发送 id 参数并将值输入调试器。它执行存储过程并从存储过程中获取数据,然后作为 ajax 返回。但在前端之后,我收到了这个错误。
  • @alka 检查我的答案。从您的屏幕截图中,我认为您正在同时发回正在运行的 ajax 调用。

标签: jquery ajax asp.net-mvc


【解决方案1】:

我通过如下修改内容解决了问题,

我已经放了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>

【讨论】:

    【解决方案2】:

    这样的整页错误,在地址栏中带有您的操作的 URL,表明它正在回发而不使用 ajax(或者可能同时执行两者)。

    • 首先在浏览器的控制台中检查是否存在阻止脚本执行的脚本错误。

    • 其次检查您的“点击”事件是否实际运行(第一行的简单alert 是最简单的方法)。

    • 第三,如果上述两个测试都通过了,那么你可能需要在事件处理程序的第一行写e.preventDefault();,以防止默认的回发行为。如果您的按钮是“提交”按钮(包括 &lt;input type="submit"&lt;button where either there's no type ("submit" is then default) ortype="submit"`) - 因为否则它将执行标准回发以及 ajax 请求。一旦回发开始并离开原始页面,则取消 ajax 请求并且不会处理响应(因为它启动的页面不再存在于浏览器中,由于回发)。

      李>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2023-03-27
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多