我有一个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( ... );
}
$('.submit').click(function(e) {
var json = JSON.stringify(data);
$.post( location.href, { item: data});
});
这提交了正确的代码。如果我在调试器中逐步执行它,则返回语句甚至会被命中,但它从不进行重定向。我该怎么办?
答案 0 :(得分:2)
如何从您想要重定向到的位置的动作返回字符串。
然后在您的成功回调中,通过设置window.location
。
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