MVC4 PartialViewResult返回一个视图而不是PartialView
我的应用程序中有一个LogInOrRegister页面,它调用2个子操作LogInOrRegister.cshtml
@{
ViewBag.Title = "Log in";
}
@Html.Action("Login", "Account", new { returlUrl = ViewBag.ReturnUrl})
@Html.Action("Register", new { returlUrl = ViewBag.ReturnUrl})
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
登录PartialView是:
@model Com.WTS.Portal.Models.LoginModel
<hgroup class="title">
<h1>@ViewBag.Title</h1>
</hgroup>
<section id="loginForm">
<h2>Use a local account to log in.</h2>
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Log in Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)
@Html.ValidationMessageFor(m => m.Email)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</li>
<li>
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe, new { @class = "checkbox" })
</li>
</ol>
<input type="submit" value="Log in" />
</fieldset>
}
</section>
我的AccountController.cs包含以下代码:
[AllowAnonymous]
public PartialViewResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return PartialView();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public PartialViewResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.Email, model.Password, persistCookie: model.RememberMe))
{
RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return PartialView(model);
}
我正确地看到了2个部分视图,我获取了页面LogInOrRegister.cshtml
当我提交表单时,如果表单中存在验证错误,则显示视图(无布局),而不是部分视图,该视图应该是LogInOrRegster的一部分
任何想法 ?
所以,如果你看看在这里发现的讨论https://stackoverflow.com/a/10253786/30850你会看到ChildActionOnlyAttribute被使用,以便一个Action可以在视图内呈现,但不能被提供给浏览器。
好的,我找到了解决方案。 通过将路由参数传递给局部视图表单:
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))
我认为我们改变了儿童行为的行为。 只有删除路由属性:
@using (Html.BeginForm())
PartialView呈现在其容器中。 此外,我们可以将POST操作定义为ChildActionOnly,它仍然有效:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[ChildActionOnly]
public PartialViewResult Login(LoginModel model, string returnUrl)
如果返回类型是PartialViewResult
,则在方法public PartialViewResult Login(LoginModel model, string returnUrl)
指定partialview名称以及public PartialViewResult Login(LoginModel model, string returnUrl)
否则使用ActionResult
作为返回类型。 ActionResult
是一个抽象类, PartialViewResult
是一个子类。
上一篇: MVC4 PartialViewResult return a view and not a PartialView