我正在制作帐户激活方法。一切都很好看。但我认为我错过了一些东西..我的激活方法工作了两次。我是网络新手。
这是我的方法
[HttpPost]
public ActionResult Active(string code)
{
return Content("Your account Successfully Activated");
}
这里是html& jquery代码
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
Yout Aktivasyon Code:
<div class="editor-field">
<input type="text" id="ActivationCode"/>
</div>
<input type="submit" value="Active"/>
</fieldset>
}
<script type="text/javascript">
$(function () {
$('form').submit(function () {
$.ajax({
url: "@Url.Action( "Active", "Account")",
type: "post",
data: { code: $('#ActivationCode').val() },
success: function (result) {
console.log("successful\n" + result);
},
error: function (request, status, error) {
console.log("error");
}
});
});
});
</script>
我在Active方法中放了一个断点并检查“code”参数。当我提交表单时,Active方法触发器和代码具有文本框中的值。然后我推动F5继续,之后Active方法再次触发并且代码值为空
我无法找出错误,为什么它会工作两次?
答案 0 :(得分:2)
可能是您正在执行ajax请求和之后的正常帖子,因为您没有阻止默认行为。尝试阻止默认行为:
$(function () {
$('form').submit(function (e) { // Add the event parameter -> e
// Prevent the default behavior.
e.preventDefault();
$.ajax({
url: "@Url.Action( "Active", "Account")",
type: "post",
data: { code: $('#ActivationCode').val() },
success: function (result) {
console.log("successful\n" + result);
},
error: function (request, status, error) {
console.log("error");
}
});
// Also return false for the default behavior.
return false;
});
});
event.preventDefault()
如果调用此方法,则不会触发事件的默认操作。
返回false
也是一种告诉事件不会实际触发的方法。
答案 1 :(得分:1)
当您按F5时,您正在刷新上次请求收到的窗口内容。在您的情况下,POST被发送到“帐户/活动”操作。但我怀疑第二次尝试时没有发送数据(文本框的内容)。
打开浏览器的网络控制台(对于IE9 - 按F12,进入网络选项卡并按下'开始捕获')并检查发送到服务器的请求体。如果数据仅在第一次尝试时发送,我将不会复卷。