【发布时间】:2018-01-09 09:51:26
【问题描述】:
我正在通过 SQL Server 使用存储过程开发一个 ASP MVC Web 应用程序。
我正在尝试建立确认警报 (Sweet Alert) 以确认已登录用户的数据更新。
编辑的代码无需确认即可完美运行。但是一旦添加了确认警报,我就会遇到通过 javascript 函数将用户(客户端)的参数从视图传递到控制器的问题。
我尝试在 onClick() 中将孔模型作为参数传递,但出现 JavaScript 错误:
Uncaught ReferenceError: Delivery is not defined at HTMLInputElement.onclick
这是我查看代码的一部分(编辑页面):
<input type="button" value="Save" class="btn btn-default" onclick="Update(@Model.ClientId)">
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<script type="text/javascript">
function Update(clientId) {
swal({
title: "Are you sure?",
text: "Once modified, you will not be able to recover your profile!",
icon: "warning",
buttons: true,
dangerMode: true,
})
.then((willDelete) => {
if (willDelete) {
$.ajax({
type: "POST",
data: {
id: clientId
},
url: "/Client/Edit",
dataType: "json",
success: function (response) {
swal("Poof! Your profile has been modified!", {
icon: "success",
}).then(function () {
window.location.href = "/Home/Index"
});
},
failure: function (response) {
alert(response.responseText);
},
error: function (response) {
alert(response.responseText);
}
});
}
else {
swal("Your profil is safe!");
}
});
}
</script>
控制器(ClientController):
[HttpPost]
public JsonResult Edit(int id, Client cmodel)
{
try
{
ClientManagement cdb = new ClientManagement();
if (cdb.UpdateDetails(cmodel))
{
TempData["Message"] = "Client Details Edited Successfully";
}
return Json("edited");
}
catch
{
return Json("Error");
}
}
ClientManagement 类:
public bool UpdateDetails(Client cmodel)
{
try
{
connection();
SqlCommand cmd = new SqlCommand("UpdateClientsInfo", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CltId", cmodel.ClientId);
cmd.Parameters.AddWithValue("@FirstName", cmodel.FirstName);
cmd.Parameters.AddWithValue("@LastName", cmodel.LastName);
cmd.Parameters.AddWithValue("@Email", cmodel.Email);
cmd.Parameters.AddWithValue("@Phone", cmodel.Phone);
cmd.Parameters.AddWithValue("@Address", cmodel.Address);
cmd.Parameters.AddWithValue("@Password", cmodel.Password);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
if (i >= 1)
return true;
else
return false;
}
catch (SqlException sqlexc)
{
foreach (SqlError error in sqlexc.Errors)
{
string msg = string.Format("{0}: {1}", error.Number, error.Message);
}
return false;
}
}
调试时,客户端的所有值(ClientId、LastName...)都是Null。
【问题讨论】:
-
您当前的代码正在发送一个只有一个属性的 js 对象(
id)。如果您想要LastName,请将其包含在 js 对象中。如果你有表单,你可以发送表单的序列化版本,而不是向 js 对象添加单个属性 -
@Shyju 是的,这就是我的意思,我怎样才能发送孔对象?我有一个表格,如何发送它的序列化版本?
-
你可以使用jQuery序列化方法。请参阅此示例stackoverflow.com/questions/10803292/…
标签: javascript c# ajax asp.net-mvc stored-procedures