ASP.NET MVC - 防止双窗体发布

时间:2010-10-28 21:14:06

标签: jquery asp.net-mvc

我有一个ASP.NET MVC表单,但是它的数据需要通过jQuery( not ajax )发布。它不能使用普通模型提交,因为Controller Action 需要一个JSON字符串,获取该字符串的唯一方法是使用jQuery的$ .post方法将数据转换为JSON,然后将其发布给控制器。

这很好用。但最终结果是,在发布后,表单应该重定向到不同的页面(如成功页面)。这不会发生,它只是停留在同一页面上。

如果我使用return false;在我的jQuery代码中,它会阻止表单再次尝试发布,但这并不能解决我的问题。我真的不想手动设置URL,因为我想尽可能多地保留javascript。

控制器

    [HttpPost]
    public ActionResult Receive([FromJson] jsonObject item)
    {
        if (ModelState.IsValid)
        {
                       // logic
        }
        return RedirectToAction( ... );
    }

的JavaScript

            $('.submit').click(function(e) {
                    var json = JSON.stringify(data);
                    $.post( location.href, { item: data});
            });

这提交了正确的代码。如果我在调试器中逐步执行它,则返回语句甚至会被命中,但它从不进行重定向。我该怎么办?

2 个答案:

答案 0 :(得分:2)

如何从您想要重定向到的位置的动作返回字符串。

然后在您的成功回调中,通过设置window.location

来使用javascript重定向方法

E.g。注意:这是未经测试的,可能不会像这样完全,但是你得到了这个。

<强>控制器

[HttpPost]
public ActionResult Receive([FromJson] jsonObject item)
{
    if (ModelState.IsValid)
    {
                   // logic
    }
    return Json("urltoredirectto");
}

<强>的JavaScript

$('.submit').click(function(e) {
    var json = JSON.stringify(data);
    $.post(location.href, { item: data },
        function (data) {
            window.location = data;
        });
});

HTHS,
查尔斯

答案 1 :(得分:1)

嗯,$ .post是一个ajax命令,因此它收到的结果是重定向请求。这意味着浏览器不会收到请求,因为ajax命令正在使用它。

我发现这可能会有所帮助: Use jQuery to attach JSON to a form and submit it