【发布时间】:2014-01-03 22:46:48
【问题描述】:
我有一个 MVC4 应用程序,并且在布局(老歌的母版页)上,我有一些 javascript:
<script type="text/javascript">
$(document).ready(function () {
$('.btnSubmit').on('click', function () {
var data = { username: $('.txtUsername').val(), password: $('.txtPassword').val(), rememberMe: $('.cbRemember').val() };
$.ajax({
url: '@Url.Action("LoginUser", "User")',
type: "POST",
contentType: "application/json",
data: JSON.stringify(data),
cache: false,
async: true,
success: function (result) {
console.log(result.toString());
if (result.Success == 'true') {
window.location = '@Url.Action("Index", "Home")';
} else {
alert(result.Message);
}
},
error: function () {
alert("Error in input");
}
});
});
});
</script>
这只是登录一个用户。
这工作正常。
但是,在另一个屏幕上,我现在有一些新的 javascript,它具有类似的功能,通过从表单中获取数据,并将其传递给控制器进行处理。
<script type="text/javascript">
$(document).ready(function () {
$('.btnSubmitNewCard').on('click', function () {
var data = { cardNumber: $('.txtNewCardNumber').val(), cardHolder: $('.txtNewCardHolder').val(), expiryMonth: $('.txtNewExpiryMonth').val(), expiryYear: $('.txtNewExpiryYear').val(), active: $('.txtNewActive').val(), accountId: $('.Id').val() };
$.ajax({
url: '@Url.Action("SaveBankCard", "BankAccount")',
type: "POST",
contentType: "application/json",
data: JSON.stringify(data),
cache: false,
async: true,
success: function (result) {
console.log(result.toString());
if (result.Success == 'true') {
// window.location = '@Url.Action("Index", "Home")';
} else {
alert(result.Message);
}
},
error: function () {
alert("Oh no");
}
});
});
});
</script>
当我单击此代码链接到的保存按钮时,代码触发,控制器方法运行良好,数据已存储,但是当我刷新屏幕时,我收到来自“未定义”错误上面的登录脚本。重新加载页面时似乎会触发。我不确定它为什么会开火。它应该刚刚加载,准备开火,但它似乎被调用了,并且失败了。
它调用的控制器是这样的:
public ActionResult SaveBankCard(string cardNumber, string cardHolder, int expiryMonth, int expiryYear, string active, int accountId)
{
var card = new AccountCardDto
{
Id = 0,
AccountId = accountId,
Active = active == "on",
CardHolderName = cardHolder,
CardNumber = cardNumber,
ExpiryDate = new DateTime(expiryYear, expiryMonth, 1)
};
int id = new BankAccountService().SaveCard(card);
return RedirectToAction("EditBankAccount", new { bankAccountId = accountId });
}
问题发生在 RedirectToAction 上...当该视图重新加载时,包括布局,布局 javascript 会触发。
编辑:我现在看到它是被触发两次的 btnSubmitNewCard javascript。当点击事件发生(预期)时一次,然后在回发发生时再次发生。为什么会发生第二个事件?
【问题讨论】:
-
为什么你首先要做 RedirectToAction 而不是使用纯表单/从 Java Script 手动重定向?顺便说一句,如果您根本不渲染它,那么该视图如何在 ajax 调用后重新加载?
-
我对此很陌生。如果我做错了什么,一定要告诉。控制器方法大惊小怪,然后,我希望它基本上只是回到调用页面。我不确定你的第二个问题。
-
默认情况下,您不能使用 ajax 请求进行重定向。您需要使用 javascript 手动执行此操作。 Ajax 请求将遵循 HTTP 302 重定向代码。看到这些问题:stackoverflow.com/questions/8436611/…dataplex.org/2009/11/asp-net-mvc-ajax-redirecttoactionstackoverflow.com/questions/5041899/…