【发布时间】:2011-04-09 10:51:14
【问题描述】:
第一次提交按预期工作,但下一次完全回发。我正在使用 jQuery.form 插件,特别是 .ajaxSubmit(options) 调用来提交表单。有几个级别的包装器 div,但我调试了 button.click 绑定,但我无法弄清楚为什么第二次,即使使用相同的变量,它也会完成一个完整的帖子,而我的部分视图返回一个全新的页面。
这里,buttonid 和 screenid 在两个帖子上都是相同的。我指出这一点是因为它们是按照命名约定计算的,例如 <name>Outer(包装器)、<name>(更新目标)和 <name>Form(要提交的表单)
$('.formButton').click(function () {
var buttonid = $(this).attr('id');
var screenid = $('#' + buttonid).closest('div:not(.CSRForm)').attr('id').replace('Outer', '');
//appends a hidden element so I know which button was pressed when posted
$('#' + screenid + 'Form').append('<input type="hidden" name="submitButton" value="' + buttonid.replace(screenid, '') + '" />');
$('#' + screenid + 'Form').submit();
});
注意.formButton 元素在表单中不是,这就是为什么我必须这样绑定提交事件。我的部分视图只返回表单而不是按钮(它们是动态的)
这里是 .ajaxSubmit:
$('.CSRForm').submit(function () {
var needsValidation = "yes";
if (needsValidation) {
$(this).ajaxSubmit({
target: '#AccountSetup',
replaceTarget: false,
success: StepCallWithForm //to check whether the response is valid for redirecting
});
return false;
}
});
以及我的 MVC 操作(如果相关):
public ActionResult AccountSetup(AccountSetupViewModel vm, string submitButton)
{
if (!ModelState.IsValid)
{
return PartialView(vm);
}
else
{
return Content(submitButton + ",AccountSetup");
}
}
编辑:
在我的$(function() { 中立即插入这一行后:
$('#AccountSetup').ajaxForm();
我能够停止完整的回发。在 Firebug 中,现在我看到 ajax 回发到 /CSR/Home/CSR?,这是所有这些东西的开始。这就像表单失去了它的动作属性。我的事件是否以某种方式交火?
【问题讨论】:
标签: jquery asp.net-mvc ajax jquery-plugins