Asp.net mvc Ajax重定向到页面,而不是更新目标
我正在使用部分视图进行登录,并希望在成功时将用户重定向到新页面,如果模型无效,则在部分视图中显示验证错误。ajax目标正在更新,是否成功。如果模型有效,它将在更新目标中显示整个新页面,但我希望它重定向到新页面。我尝试了重定向和重定向操作,但没有得到想要的结果。任何关于我能做什么的想法都可以让ajax更新重定向到新页面,而不是更新目标。另外,如果我使用了错误的方法,请告诉我 部分视图代码:Asp.net mvc Ajax重定向到页面,而不是更新目标,asp.net-mvc,asp.net-ajax,asp.net-mvc-partialview,Asp.net Mvc,Asp.net Ajax,Asp.net Mvc Partialview,我正在使用部分视图进行登录,并希望在成功时将用户重定向到新页面,如果模型无效,则在部分视图中显示验证错误。ajax目标正在更新,是否成功。如果模型有效,它将在更新目标中显示整个新页面,但我希望它重定向到新页面。我尝试了重定向和重定向操作,但没有得到想要的结果。任何关于我能做什么的想法都可以让ajax更新重定向到新页面,而不是更新目标。另外,如果我使用了错误的方法,请告诉我 部分视图代码: <% using (Ajax.BeginForm( "LogOn",
<% using (Ajax.BeginForm(
"LogOn",
null,
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "SignInForm"
},
new {
id = "SignInForm", ReturnUrl = Request.QueryString["ReturnUrl"]
})) { %>
<<Page HTML Controls>>
<input type="submit" value="Log On" />
<% } %>
要执行重定向,需要在客户端执行。因此,您不能再使用
UpdateTargetId
,而是应该使用OnSuccess
选项。您还需要修改登录
控制器操作,以便在重定向的情况下,您可以测试它是否是ajax请求,在这种情况下,返回一个Json对象,其中包含将在javascript中使用的重定向url:
if (ModelState.IsValid)
{
if (string.IsNullOrEmpty(returnUrl))
{
returnUrl = Url.Action("Index", "App");
}
if (Request.IsAjaxRequest())
{
return Json(new { returnUrl = returnUrl });
}
return Redirect(returnUrl);
}
并且认为:
<% using (Ajax.BeginForm(
"LogOn",
null,
new AjaxOptions {
HttpMethod = "POST",
OnSuccess = "success"
},
new {
id = "SignInForm", ReturnUrl = Request.QueryString["ReturnUrl"]
})) { %>
<<Page HTML Controls>>
<input type="submit" value="Log On" />
<% } %>
<script type="text/javascript">
function success(context) {
var returnUrl = context.get_data().returnUrl;
if (returnUrl) {
window.location.href = returnUrl;
} else {
// TODO: update the target form element with the returned partial html
}
}
</script>
函数成功(上下文){
var returnUrl=context.get_data().returnUrl;
如果(返回URL){
window.location.href=returnUrl;
}否则{
//TODO:使用返回的部分html更新目标表单元素
}
}
<% using (Ajax.BeginForm(
"LogOn",
null,
new AjaxOptions {
HttpMethod = "POST",
OnSuccess = "success"
},
new {
id = "SignInForm", ReturnUrl = Request.QueryString["ReturnUrl"]
})) { %>
<<Page HTML Controls>>
<input type="submit" value="Log On" />
<% } %>
<script type="text/javascript">
function success(context) {
var returnUrl = context.get_data().returnUrl;
if (returnUrl) {
window.location.href = returnUrl;
} else {
// TODO: update the target form element with the returned partial html
}
}
</script>