我是探索MVC3的新手,并提出了一个问题。
我正在编辑我的主视图,并且希望在用户未登录时在每个页面上显示登录框。我使用此代码完成了此操作:
@if (Request.IsAuthenticated)
{
<text>Welcome <strong>@User.Identity.Name</strong>!
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
else
{
Html.RenderPartial("../Account/LogOn");
}
这适用于转到HomeController的普通Index方法。
但是,当我转到我的NewsController的Index方法时,我收到以下错误:
传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [LeagueSite.Models.News]',但此字典需要类型为'leagueSite.Models.LogOnModel'的模型项。< / p>
我明白问题是什么,但实际上并不知道它的解决方案。
视图LogOn看起来像这样(标准的MVC3登录视图):
@model LeagueSite.Models.LogOnModel
@{
ViewBag.Title = "Log On";
}
<h2>Login</h2>
<p>
Please enter your user name and password. @Html.ActionLink("Register", "Register") if you don't have an account.
</p>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")
@using (Html.BeginForm()) {
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="editor-label">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
<p>
<input type="submit" value="Log On" />
</p>
</fieldset>
</div>
} `
任何提示/想法?
答案 0 :(得分:1)
快速而肮脏:而非Html.RenderPartial
使用Html.RenderAction
:
Html.RenderAction("LogOn", "Account");
并且在LogOn
控制器的Account
操作中确保返回PartialView
或者您将获得堆栈溢出并且Cassini将崩溃:
public ActionResult LogOn()
{
return PartialView();
}
答案 1 :(得分:1)
我认为你的“新闻”视图已经有了与之相关的模型。 也许它是这样开始的?:
@model LeagueSite.Models.News
好吧,如果是这样,如果你没有将模型传递给你的局部视图,那么框架默认假设该部分的模型是“LeagueSite.Models.News”,这当然不是你想要的。您必须将LogOnModel传递到LogOn局部视图,如下所示:
Html.RenderPartial("../Account/LogOn", Model.ObjLogonModel);
这假设您在“新闻”模型中有一个LogonModel实例。那么你将能够处理登录操作 问候