syd*_*yos 35 jquery asp.net-mvc-3
上下文:Asp.Net MVC3 w/Razor
我试图在Razor布局(以前的母版页)上放置一个登录表单,这样,当用户超时时,可以提示他/她登录而不被重定向(如在RallyDev中).因此,我在Ajax.BeginForm中创建了一个部分_LogOn.cshtml,其中包含所有必需的东西(用户名等),其中UpdateTargetId指向一个div,该div包含ajax表单内的登录控件.表单回发到AccountsController.RefreshLogOn操作,但显然,包含的页面可能是从不同的控制器呈现的.RefreshLogOn操作返回PartialView("_ LogOn").在任何情况下,我的期望/愿望是只替换此div中的控件.相反,我的页面位置更改为/ Accounts/RefreshLogon,整个页面被部分替换.我应该采取另一种方法吗?
这是相关的代码:
_LogOn.cshtml
@{
using (Ajax.BeginForm("RefreshLogOn", "Accounts",
new AjaxOptions {
OnSuccess = "logonSucceeded",
OnFailure = "logonFailed",
HttpMethod = "Post",
UpdateTargetId = "user-info" },
new { @id = "refresh"}))
{
@Html.AntiForgeryToken()
<div id="user-info">
<p>Your session has expired.</p>
<div class="error">@Html.ValidationSummary()</div>
<table>
<tr>
<td>Username:</td>
<td>@Html.TextBoxFor(model => model.UserName)</td>
</tr>
<tr>
<td>Password:</td>
<td>@Html.PasswordFor(model => model.Password)</td>
</tr>
<tr>
<td>Remember Me:</td>
<td>@Html.CheckBoxFor(model => model.RememberMe)</td>
</tr>
</table>
</div>
}
}
Run Code Online (Sandbox Code Playgroud)
AccountsController
public ActionResult RefreshLogOn (LogOnModel model)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
...content elided...
return PartialView("_LogOn");
}
ModelState.AddModelError("", ErrorMessages.IncorrectUsernameOrPassword);
}
return PartialView("_LogOn", model);
}
Run Code Online (Sandbox Code Playgroud)
Ajax.BeginForm - >生成的表单标签:
<form action="/Accounts/RefreshLogOn" id="refresh" method="post"
onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));"
onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event),
{
insertionMode: Sys.Mvc.InsertionMode.replace,
httpMethod: 'Post',
updateTargetId: 'user-info',
onFailure: Function.createDelegate(this, logonFailed),
onSuccess: Function.createDelegate(this, logonSucceeded)
});">
Run Code Online (Sandbox Code Playgroud)
注意:我的问题是第一次,我引用了错误的 ajax脚本文件jquery.validate.unobtrusive.min.js
而不是jquery.unobtrusive-ajax.js
最新的jquery版本不起作用,只 jquery-1.7.1.min.js
对我有用.
我成功进入后试图返回内容
所以这是订单:
<script src="~/js/jquery-1.7.1.min.js"></script>
<script src="~/js/jquery.validate.min.js"></script>
<script src="~/js/jquery.unobtrusive-ajax.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
Darin和 Richard Everett的帖子得到了帮助.希望有所帮助
归档时间: |
|
查看次数: |
29724 次 |
最近记录: |