2012-03-25 134 views
1

虽然我读了几十个答案,但我找不到解决方案。 我使用MVC 3与剃刀。我有一个简单的表单,通过ajax进行客户端验证。这部分工作正常。我的问题是:在我的控制器更新行动我想重定向到另一个行动。如果用户禁用了Javacript,这可以正常工作。但启用javascript/ajax后,redirectaction似乎不起作用。相反,它看起来像是某种partialview或类似的东西被执行。Ajax submit重定向MVC 3

我的控制器/动作代码:

Function UpdateItem(Item As CItem) As ActionResult 

    ' some validation code, save etc. 

    if everythingok then 
     Return RedirectToAction("Updatesuccess") 
    else 
     Return RedirectToAction("EditItem") 
    endif 

End Function 

我的HTML页面看起来像(简称/伪):

Logo image 
H1 
some text 

<form>....</form> 

当窗体通过AJAX新的HTML代码被添加超出提交“一些文本”,所以表格被替换,但替换表格上方的所有内容都保留在页面上。 当ajax/javascript被禁用时,在提交完整的新页面后加载。我检查了http头并注意到,用ajax没有重定向(这在某种程度上是合乎逻辑的,因为它是ajax)。 我能做什么?我想重定向到一个新页面。

是否可以禁用ajax-submit并仅使用“正常”表单提交? 我喜欢用户输入数据时通过ajax进行的客户端验证,我想使用它,但对我来说,如果提交是“正常”提交,那就足够了。

我希望有人了解我想要什么并能帮助我。

谢谢。

回答

3

我不是100%肯定我明白你的问题,但究竟发生了什么,不要downvote我:)

的问题是,通过重定向发送作品的HttpResponse在头部中指示重定向,这是浏览器理解的。如果你通过AJAX提交,它不是处理请求的浏览器,它是你的OWN JS代码。

这里有一个诀窍:不是返回一个重定向,而是返回Url(最好是json),然后使用window.location手动重定向。 我不精通VB,这里就是我会做它在C#:

var url = new UrlHelper(this.ControllerContext.RequestContext); 
var link = url.Action("UpdateSuccess"); 
return Json(new {link}); 

,然后在jQuery的:

$.ajax({ method: 'POST', 
      url: 'your post url', 
      success: function(result) {window.location = result.link; }, 
      // ... (passing form etc) 
    }); 
+0

谢谢您的回答。因为我没有那么强大,我花了一段时间才让它运行,但没关系。 – 2012-03-26 14:02:49