0

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

这是我的方法

[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 方法中放置了一个断点并检查“代码”参数。当我提交表单时,Active 方法触发并且代码具有文本框中的值。然后我按 F5 继续,之后 Active 方法再次触发并且代码值为 null

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

4

2 回答 2

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 文档

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

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

于 2013-02-07T09:03:26.180 回答
1

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

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

于 2013-02-07T08:57:37.907 回答