Ajax asp.net mvc部分视图重定向或显示错误
我有一个登录小部件,它是一个局部视图,我希望在出现问题时使用模型验证错误进行更新,否则应该重新加载页面 我有以下几点 LogOn.cshtmlAjax asp.net mvc部分视图重定向或显示错误,ajax,asp.net-mvc-3,redirect,partial-views,Ajax,Asp.net Mvc 3,Redirect,Partial Views,我有一个登录小部件,它是一个局部视图,我希望在出现问题时使用模型验证错误进行更新,否则应该重新加载页面 我有以下几点 LogOn.cshtml @{ var ajaxOpts = new AjaxOptions {OnSuccess = "success"}; } <div id="login"> @Html.ValidationSummary(excludePropertyErrors: true) <h2>Start by Logging
@{
var ajaxOpts = new AjaxOptions {OnSuccess = "success"};
}
<div id="login">
@Html.ValidationSummary(excludePropertyErrors: true)
<h2>Start by Logging in</h2>
@using (Ajax.BeginForm("LogOn", "Account", ajaxOpts))
{
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td>
<span class="bluey">Username:</span><br />
@Html.TextBoxFor(m => m.UserName, new {tabindex = "1", Class = "field"})
@Html.ValidationMessageFor(m => m.UserName, "*")
</td>
<td>
<span class="bluey">Password:</span><br />
@Html.TextBoxFor(m => m.Password, new {tabindex = "2", Class = "field"})
@Html.ValidationMessageFor(m => m.Password, "*")
</td>
</tr>
<tr>
<td>
<input name="login" type="submit" value="Submit" class="input_btn" tabindex="3" />
</td>
<td>@Html.CheckBoxFor(m => m.RememberMe) @Html.LabelFor(m => m.RememberMe) <span class="bluey"> | </span> @Html.ActionLink("Forgot Password?", "Password", "User")</td>
</tr>
</table>
}
</div>
<script>
function success(context) {
//var returnUrl = context.get_data().returnUrl;
//if (returnUrl) {
// window.location.href = returnUrl;
//} else {
$("#login").replaceWith(context);
//}
}
</script>
我让它工作,以便当数据不正确时,部分视图会重新显示并出现错误。但是,只有在用户成功登录并重定向页面时,我注释掉了成功(上下文)中的其他javascript行,这一部分才起作用
有更好的方法吗
我确实尝试使用Json()返回匿名对象,该对象具有status属性和returnUrl或Html,但是我不知道如何将PartialView(userDetails)生成的Html获取到Json()调用中,这似乎是一种错误的处理方式。在AJAX调用中无法重定向。您可以从服务器返回一个JSON对象,指向要重定向到的url,然后在成功回调中执行实际的重定向
function success(result) {
if (result.returnUrl) {
// the controller action returned JSON
window.location.href = returnUrl;
} else {
// the controller action returned a partial
$('#login').html(result);
}
}
现在,如果控制器操作成功,只需返回返回url,而不是重定向:
return Json(new { returnUrl = returnUrl });
顺便说一句,您似乎已经在视图中找到了返回url:
Request.url.PathAndQuery
。我不认为让它在服务器上来回传输有什么意义。您只需返回一些表示成功的JSON布尔值,并在成功回调中执行重定向到url。我想知道我是否使用了jquery.ajax,因为它似乎支持状态代码,这是否有效?@DanielPowell,这正是UnobtrusiveAjax在封面下使用的->jquery.ajax。因此,这将是完全相同的。当然,它不会与jquery.ajax或任何ajax调用一起工作,即使是最基本的内置浏览器XmlHttpRequest对象。如果在服务器中重定向,客户端将自动跟随重定向,直到到达最终目的地,当然,该目的地的状态代码为200。
return Json(new { returnUrl = returnUrl });