我有一个登录小部件,这是一个局部视图,我想在出现问题时更新模型验证错误,否则应该重新加载页面。asp.net mvc部分视图重定向或显示错误
我有以下
LogOn.cshtml
@{
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>
和被调用的动作是
[HttpPost]
public ActionResult LogOn(LogOnModel userDetails, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(userDetails.UserName, userDetails.Password))
{
FormsAuthentication.SetAuthCookie(userDetails.UserName, userDetails.RememberMe);
return Redirect(returnUrl);
}
ModelState.AddModelError("", "The username or password provided was incorrect");
}
return PartialView(userDetails);
}
我有工作,这样当数据是不正确的部分视图重新显示错误,但只有当我注释掉其他成功(上下文)中的javascript行时,此部分才有效那里为用户登录成功和页面应重定向。
有没有更好的方法来做到这一点?
我曾尝试返回具有status属性和returnUrl或Html的Json()的匿名对象,但我无法弄清楚如何获取由PartialView(userDetails)生成的html到Json( )电话,而且看起来这可能是反正事情的错误方式。
我想知道如果我使用jquery.ajax,如果它会工作,因为它似乎有支持状态代码? – 2012-03-06 12:25:38
@DanielPowell,这正是unobtrusibve-ajax在封面下使用的 - > jquery.ajax。所以它会完全相同。而且,不,当然,它不适用于jquery.ajax或任何AJAX调用,即使是最基本的XmlHttpRequest对象内置浏览器。如果您在服务器中重定向,则客户端会自动遵循重定向,直到它到达最终目的地,当然这些目的地的状态码为200。 – 2012-03-06 12:31:21