我正在尝试将ViewData传递到我的asp.net mvc主页,以获取我保留在母版页上的mvc usercontrol.例如,我创建了一个名称下拉列表作为mvc usercontrol,我把它放在我的母版页中.
我遇到的问题是将ViewData传递给母版页.我发现微软的这篇文章有一个不错的解决方案,但我想知道是否还有其他"更好"的解决方案.我不喜欢链接中的解决方案是我必须更改每个控制器以继承新的控制器类.
http://www.asp.net/learn/MVC/tutorial-13-cs.aspx
编辑:我正在看的问题是,如果我将用户控件放在依赖于ViewData的母版页中,我必须为使用所述母版页的每个页面重复包含该ViewData.上述链接中的解决方案可能是最佳解决方案,但我希望还有其他替代方案.
以下是Visual Studio(LogOnUserControl.ascx)创建的标准默认ASP.NET MVC项目中的LogOn用户控件:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
if (Request.IsAuthenticated) {
%>
Welcome <b><%: Page.User.Identity.Name %></b>!
[ <%: Html.ActionLink("Log Off", "LogOff", "Account") %> ]
<%
}
else {
%>
[ <%: Html.ActionLink("Log On", "LogOn", "Account")%> ]
<%
}
%>
Run Code Online (Sandbox Code Playgroud)
它被插入到母版页中:
<div id="logindisplay">
<% Html.RenderPartial("LogOnUserControl"); %>
</div>
Run Code Online (Sandbox Code Playgroud)
该<%: Page.User.Identity.Name %>代码显示的登录名的用户,当前登录的.
如何显示用户FirstName而不是保存在配置文件中?
我们可以在如下控制器中读取它:
ViewData["FirstName"] = AccountProfile.CurrentUser.FirstName;
Run Code Online (Sandbox Code Playgroud)
例如,如果我们尝试这样做:
<%: ViewData["FirstName"] %>
Run Code Online (Sandbox Code Playgroud)
它仅在控制器调用的页面上呈现,其中 ViewData["FirstName"]值已分配.