将存储过程查询结果从 JSonResult 传递到 Ajax
Passing Stored Procedure query result from JSonResult to Ajax
美好的一天!我试图将存储过程查询的结果显示到我页面上的文本框中。这个存储过程只有returns一个结果,就是每天的销售额。我正在尝试通过 JSonresult 执行此操作,以便我可以将它传递到我的视图页面中的 ajax。但我似乎无法成功通过它。
我有一个名为 ORDER 的 table,它有一个 ORDER_DATE & NET_AMOUNT 列。我需要显示当天 net_amount 的总和。这是我的查询:
SELECT SUM(NET_AMOUNT) AS DAILY_SALES
FROM [ORDER]
WHERE ORDER_DATE = GETDATE()
然后我用这个方法在我的控制器中调用这个存储过程:
public JsonResult GetSalesToday()
{
DataTable dtTable = new DataTable();
List<string> lstSales = new List<string>();
string strQuery = "SP_DAILY_SALES";
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString());
SqlCommand cmd = new SqlCommand(strQuery, con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dtTable);
foreach (DataRow row in dtTable.Rows)
{
lstSales.Add(row["DAILY_SALES"].ToString());
}
var DailySales = new
{
SALESTODAY = lstSales
};
return Json(DailySales, JsonRequestBehavior.AllowGet);
}
然后用这个调用它到我的视图:
$.ajax(
{
datatype: "json",
type: "POST",
url: "/Sales/GetSalesToday",
data: JSON,
success: function (data) {
DailySales(data);
},
error: function () { alert("Error"); }
});
如何将它调用到我的文本框?
<div class="form-group">
@Html.LabelFor("DailySales", "Sales", htmlAttributes: new { @class = "col-xs-4 col-sm-offset-1 col-sm-4" })
<div class="col-lg-6 col-lg-6 col-md-6 col-md-6 col-sm-6 col-sm-6 col-xs-6 col-xs-6">
@Html.TextBoxFor("DailySales", new { @class = "form-control" })
@Html.ValidationMessageFor("DailySales", "", new { @class = "text-danger" })
</div>
</div>
我哪里错了?有人可以帮我解决这个问题吗?提前致谢!
如果你想要总和,只需为它保留一个变量,return就是那个。
decimal total = 0.0M;
foreach (DataRow row in dtTable.Rows)
{
total += Convert.ToInt32(row["DAILY_SALES"]);
}
return Json(total,JsonRequestBehaviour.AllowGet);
并在您的 ajax 调用的成功回调中,读取值并使用 jQuery val()
方法分配给文本框。
success: function (data){
$("#DailySales").val(data);
},
如果您的存储过程是 return 单个标量值,则无需遍历数据行!您也可以考虑使用 ExecuteScalar
方法。我还更改了您使用 using
的方法,以便正确关闭连接。
假设您的存储过程是return单个十进制值。
public JsonResult GetSalesToday()
{
var strQuery = "SP_DAILY_SALES";
decimal total = 0.0M;
var conStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
using (var con = new SqlConnection(conStr)))
{
using (var cmd = new SqlCommand(strQuery, con))
{
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
total = (decimal)cmd.ExecuteScalar();
}
}
return Json(total, JsonRequestBehavior.AllowGet);
}
此外,我发现您的代码有一些错误。 TextBoxFor
和 LabelFor
辅助方法不接受字符串作为参数。您需要使用 Html.TextBox
和 Html.Label
方法
@Html.Label("DailySales", "Sales",new { @class = "col-xs-4 col-sm-offset-1 col-sm-4" })
@Html.TextBox("DailySales", new { @class = "form-control" })
`decimal total = 0.0;
foreach (DataRow row in dtTable.Rows)
{
lstSales.Add(row["DAILY_SALES"].ToString());
total = total + Convert.ToInt32(row["DAILY_SALES"]);
}
return Json(total,JsonRequestBehaviour.AllowGet);`
美好的一天!我试图将存储过程查询的结果显示到我页面上的文本框中。这个存储过程只有returns一个结果,就是每天的销售额。我正在尝试通过 JSonresult 执行此操作,以便我可以将它传递到我的视图页面中的 ajax。但我似乎无法成功通过它。
我有一个名为 ORDER 的 table,它有一个 ORDER_DATE & NET_AMOUNT 列。我需要显示当天 net_amount 的总和。这是我的查询:
SELECT SUM(NET_AMOUNT) AS DAILY_SALES
FROM [ORDER]
WHERE ORDER_DATE = GETDATE()
然后我用这个方法在我的控制器中调用这个存储过程:
public JsonResult GetSalesToday()
{
DataTable dtTable = new DataTable();
List<string> lstSales = new List<string>();
string strQuery = "SP_DAILY_SALES";
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString());
SqlCommand cmd = new SqlCommand(strQuery, con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dtTable);
foreach (DataRow row in dtTable.Rows)
{
lstSales.Add(row["DAILY_SALES"].ToString());
}
var DailySales = new
{
SALESTODAY = lstSales
};
return Json(DailySales, JsonRequestBehavior.AllowGet);
}
然后用这个调用它到我的视图:
$.ajax(
{
datatype: "json",
type: "POST",
url: "/Sales/GetSalesToday",
data: JSON,
success: function (data) {
DailySales(data);
},
error: function () { alert("Error"); }
});
如何将它调用到我的文本框?
<div class="form-group">
@Html.LabelFor("DailySales", "Sales", htmlAttributes: new { @class = "col-xs-4 col-sm-offset-1 col-sm-4" })
<div class="col-lg-6 col-lg-6 col-md-6 col-md-6 col-sm-6 col-sm-6 col-xs-6 col-xs-6">
@Html.TextBoxFor("DailySales", new { @class = "form-control" })
@Html.ValidationMessageFor("DailySales", "", new { @class = "text-danger" })
</div>
</div>
我哪里错了?有人可以帮我解决这个问题吗?提前致谢!
如果你想要总和,只需为它保留一个变量,return就是那个。
decimal total = 0.0M;
foreach (DataRow row in dtTable.Rows)
{
total += Convert.ToInt32(row["DAILY_SALES"]);
}
return Json(total,JsonRequestBehaviour.AllowGet);
并在您的 ajax 调用的成功回调中,读取值并使用 jQuery val()
方法分配给文本框。
success: function (data){
$("#DailySales").val(data);
},
如果您的存储过程是 return 单个标量值,则无需遍历数据行!您也可以考虑使用 ExecuteScalar
方法。我还更改了您使用 using
的方法,以便正确关闭连接。
假设您的存储过程是return单个十进制值。
public JsonResult GetSalesToday()
{
var strQuery = "SP_DAILY_SALES";
decimal total = 0.0M;
var conStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
using (var con = new SqlConnection(conStr)))
{
using (var cmd = new SqlCommand(strQuery, con))
{
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
total = (decimal)cmd.ExecuteScalar();
}
}
return Json(total, JsonRequestBehavior.AllowGet);
}
此外,我发现您的代码有一些错误。 TextBoxFor
和 LabelFor
辅助方法不接受字符串作为参数。您需要使用 Html.TextBox
和 Html.Label
方法
@Html.Label("DailySales", "Sales",new { @class = "col-xs-4 col-sm-offset-1 col-sm-4" })
@Html.TextBox("DailySales", new { @class = "form-control" })
`decimal total = 0.0;
foreach (DataRow row in dtTable.Rows)
{
lstSales.Add(row["DAILY_SALES"].ToString());
total = total + Convert.ToInt32(row["DAILY_SALES"]);
}
return Json(total,JsonRequestBehaviour.AllowGet);`