You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP MVC中使用Sweet Alert确认用户数据编辑的参数传递问题

解决Sweet Alert确认后表单数据无法传递到控制器的问题

看起来你遇到的核心问题是:AJAX请求只传递了ClientId,没有把表单里的用户输入数据(比如FirstName、LastName等)发送给控制器,导致cmodel的所有属性都是Null,存储过程自然无法正确执行更新。

下面是具体的修复步骤和代码调整:

1. 视图端:传递完整的表单数据

你当前的AJAX只传了id: clientId,但更新需要的是用户在表单里修改后的所有字段值。我们需要把整个表单的数据序列化后传给控制器:

修改视图代码:

首先,确保你的表单有一个id(比如clientForm),并且表单内的输入框name属性和Client模型的属性完全一致(比如name="FirstName"对应cmodel.FirstName):

@model YourNamespace.Client

<form id="clientForm">
    <!-- 你的表单输入字段,示例: -->
    <input type="hidden" name="ClientId" value="@Model.ClientId" />
    <input type="text" name="FirstName" value="@Model.FirstName" />
    <input type="text" name="LastName" value="@Model.LastName" />
    <!-- 其他字段:Email、Phone、Address、Password等 -->
    
    <input type="button" value="Save" class="btn btn-default" onclick="Update()">
</form>

<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
function Update() {
 swal({
 title: "Are you sure?",
 text: "Once modified, you will not be able to recover your profile!",
 icon: "warning",
 buttons: true,
 dangerMode: true,
 })
 .then((willUpdate) => {
 if (willUpdate) {
 $.ajax({
 type: "POST",
 // 序列化整个表单数据,自动匹配模型属性
 data: $('#clientForm').serialize(),
 url: "/Client/Edit",
 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 profile is safe!");
 }
 });
}
</script>

2. 控制器端:简化参数并确保模型绑定正确

你的Edit方法里的int id参数是多余的,因为Client模型已经包含了ClientId。可以修改控制器方法,只接收Client模型,让ASP.NET MVC自动完成模型绑定:

[HttpPost]
public JsonResult Edit(Client cmodel) {
 try {
    // 先验证ClientId是否有效
    if(cmodel.ClientId <= 0) {
        return Json("Invalid client ID");
    }
    ClientManagement cdb = new ClientManagement();
    if (cdb.UpdateDetails(cmodel)) {
        TempData["Message"] = "Client Details Edited Successfully";
        return Json("edited");
    }
    return Json("Update failed");
 } catch (Exception ex) {
    // 建议在这里记录异常日志,方便排查问题
    return Json($"Error: {ex.Message}");
 }
}

3. 关键注意事项

  • 确保表单内所有输入字段的name属性和Client模型的属性名称完全一致(大小写敏感),这是ASP.NET MVC模型绑定的核心要求。如果用强类型视图,推荐使用Html.EditorFor辅助生成输入框,比如@Html.EditorFor(m => m.FirstName),它会自动匹配name属性。
  • 不需要手动传递整个模型到JavaScript函数,直接通过表单序列化就能获取最新的用户输入,这也避免了之前出现的Delivery is not defined这类JS错误。
  • 确认你的Client模型属性都有公共的get/set方法,否则模型绑定无法赋值。

这样修改后,AJAX请求会把表单里的所有字段(包括ClientId、FirstName等)都发送到控制器,cmodel的属性会被正确填充,存储过程就能执行正常的更新操作了。

内容的提问来源于stack exchange,提问作者Exact

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:27:58