为什么我的激活方法工作两次?

时间:2013-02-07 08:51:57

标签: asp.net asp.net-mvc-3 jquery activation

我正在制作帐户激活方法。一切都很好看。但我认为我错过了一些东西..我的激活方法工作了两次。我是网络新手。

这是我的方法

[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方法再次触发并且代码值为空

我无法找出错误,为什么它会工作两次?

2 个答案:

答案 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;
    });
});

来自jQuery documentation

  

event.preventDefault()
  如果调用此方法,则不会触发事件的默认操作。

返回false也是一种告诉事件不会实际触发的方法。

答案 1 :(得分:1)

当您按F5时,您正在刷新上次请求收到的窗口内容。在您的情况下,POST被发送到“帐户/活动”操作。但我怀疑第二次尝试时没有发送数据(文本框的内容)。

打开浏览器的网络控制台(对于IE9 - 按F12,进入网络选项卡并按下'开始捕获')并检查发送到服务器的请求体。如果数据仅在第一次尝试时发送,我将不会复卷。