Ajax提交重定向MVC 3

时间:2012-03-25 18:45:22

标签: ajax redirect submit

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

我的控制器/操作代码:

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代码会添加到&#34;某些文本&#34;之后,因此表单会被替换,但替换表单上方的所有内容都会保留在页面上。 当ajax / javascript被禁用时,在提交后会加载一个全新的页面。我检查了http标头并注意到,使用ajax没有重定向(这在某种程度上是合乎逻辑的,因为它是ajax)。 我能做什么?我想重定向到新页面。

是否可以禁用ajax-submit并仅使用&#34; normal&#34;形式提交? 我喜欢通过ajax进行客户端验证,同时用户输入数据并且我想使用它,但对我而言,如果提交将是&#​​34;正常&#34;那就足够了。提交。

我希望有人理解我想要的东西并且可以帮助我。

感谢。

1 个答案:

答案 0 :(得分:3)

我不是100%肯定我理解你的问题,但是到底是什么,不要贬低我:)

问题是,重定向的工作原理是通过发送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)
     });