虽然我读了几十个答案,但我找不到解决办法。 我正在使用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;那就足够了。提交。
我希望有人理解我想要的东西并且可以帮助我。
感谢。
答案 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)
});