【发布时间】:2016-02-26 00:42:34
【问题描述】:
我有一个父表单正在使用模式表单来更新它。用户完成模态表单后:
- 我希望它关闭模态表单
- 触发将调用控制器函数来更新数据库表的回发
- 避免使用默认提交操作 (
e.preventDefault()) 进行重定向
我的问题是,如果我删除默认提交事件,则不会发生回发,并且我的数据库表保持不变。我正在使用 AJAX 修改父表单上的文本以反映用户更新。
如何在不离开父表单的情况下强制发回帖子?我不想重新加载网页;只更新值,关闭模态表单并触发 post 事件调用更新函数。
注意:如果我省略 preventDefault() 事件,网页总是会重定向到 url:/client/UpdateClientDetails/' + id
请看下面我的代码 sn-ps:
AJAX sn-p
<script type="text/javascript">
$('.btn-primary').click(function (e) {
$.ajax({
url: '/Client/UpdateClientDetails',
type: 'POST',
dataType: 'json',
data: newClient = {
address1: $("#clientAddress1-@Model.Id").val(),
address2: $("#clientAddress2-@Model.Id").val(),
city: $("#clientCity-@Model.Id").val(),
province: $("#clientProvince-@Model.Id").val(),
postalCode: $("#clientPostalCode-@Model.Id").val(),
phoneNumber: $("#clientPhoneNumber-@Model.Id").val()
},
cache: false,
contentType: 'application/json; charset=utf-8',
success: function (data) {
$("#Address1-@Model.Id").text(newClient.address1);
$("#Address2-@Model.Id").text(newClient.address2);
$("#City-@Model.Id").text(newClient.city);
$("#Province-@Model.Id").text(newClient.province);
$("#PostalCode-@Model.Id").text(newClient.postalCode);
$("#PhoneNumber-@Model.Id").text(newClient.phoneNumber);
$("#dialog-actions").dialog('close');
},
error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); }
});
});
模态形式的开始
@using (Html.BeginForm("UpdateClientDetails", "Client", FormMethod.Post, attributes))
{
//HTML Helpers & other things here
}
我要调用的控制器方法
[HttpPost]
public void UpdateClientDetails(Client newClientDetails)
{
_clientService.UpdateClient(newClientDetails);
}
【问题讨论】:
-
不要使用提交按钮,只需
<button type="button" id="save">Save</button>并处理它的.click()事件。但是您的脚本没有向控制器发送任何数据 - 您需要添加data: $('form').serialize(),并且不清楚您认为success回调中的所有代码应该做什么。
标签: javascript jquery ajax forms model-view-controller