0

我试图找出一种在我的所有部分以及我的视图中都有“全局”成员(例如 CurrentUser、Theme 等)的好方法。

我不希望有一个可以返回此数据的逻辑类(例如 BL.CurrentUser) 我确实认为它需要成为我视图中模型的一部分所以我尝试使用这些成员从 BaseViewData 继承。在我的控制器中,以这种或其他方式(我的 BaseController 中的过滤器或基本方法),我创建了继承类的实例并将其作为视图数据传递。到目前为止一切都很完美,因为我的视图数据可以在主视图上与基本成员一起使用。但是部分呢?

如果我有一个需要显示博客文章的简单部分,那么它看起来像这样:

<%@ Control Language="C#" AutoEventWireup="true" Inherits="ViewUserControl<Post>" %>

以及在我看来呈现这个部分的简单代码(它的 model.Posts 是IEnumerable<Post>):

<%foreach (Post p in this.Model.Posts) {%>
    <%Html.RenderPartial("Post",p); %>
<%}%>

由于局部模型不是 BaseViewData,因此我无权访问这些属性。因此,我尝试创建一个名为 PostViewData 的类,它继承自 BaseViewData,但随后我的包含视图将有一个代码来实际在其中创建 PostViewData,以便将其传递给部分视图:

<%Html.RenderPartial("Post",new PostViewData { Post=p,CurrentUser=Model.CurrentUser,... }); %>

或者我可以使用复制构造函数

<%Html.RenderPartial("Post",new PostViewData(Model) { Post=p }); %>

我只是想知道在我继续之前是否还有其他方法可以实现这一点。

有什么建议么?

谢谢!

4

1 回答 1

0

您是否考虑过将这些内容保留在会话中并围绕会话编写强类型包装器,以便您可以访问这些信息?然后在任何视图中,您都可以简单地使用 ViewPage(或 ViewUserControl)的 Session 属性创建一个新的包装类并使用它。

于 2009-06-24T13:27:07.443 回答