ASP.NET MVC:如何处理必须转到每个视图的模型数据?

时间:2010-10-27 18:47:11

标签: asp.net-mvc models global

因此,如果有一些全局状态,MVC应用程序的每个视图都需要呈现...例如:IsUserLoggedOnUserName ...是什么方式获取该信息的适当方式每个观点?

我理解视图的那一部分应该在母版页或部分视图中添加到其他视图中。但是什么是确保每次从所有相关控制器和操作将“全局”模型数据传递到视图的好方法?

3 个答案:

答案 0 :(得分:6)

在问到这个之后,我发现史蒂夫桑德森的这篇好文章: http://blog.stevensanderson.com/2008/10/14/partial-requests-in-aspnet-mvc/

他提出了三种不同的方法:

  • 每次使用基本控制器类或ActionFilter将相关模型添加到ViewData[]集合。我想有些人已经提出过这样的事情了。

  • 在视图中使用Html.RenderAction() ......正如他所说:

  

如果有人告诉你内部的话   子请求是坏的,因为   它“不是MVC”,然后咬它们   面子立刻。还问他们   为什么他们仍然愿意使用Ajax,   甚至是<IMG>标签,   鉴于两者都是一种形式   子请求。

  • 使用'部分请求'(他在his blog上提供此代码),允许一个控制器将对其他控制器的调用嵌套到嵌套的ViewData结构中。

答案 1 :(得分:3)

代码 - 在同一时间查看类似问题的答案:

ASP.NET MVC displaying user name from a Profile

简而言之,基本上创建一个由所有其他控制器继承的基本控制器。然后,基本控制器具有一个覆盖功能,可以将thro'传送到所有'子'控制器。而不是重复代码,看看我上面的答案并试一试..

...欢呼声

答案 2 :(得分:2)

您可以为viewmodel创建包含共享信息的基类,并为每个viewmodel继承该基类。

public class ViewModelBase
{
    // shared data
}
public class Page1ViewModel : ViewModelBase
{
    // page 1 data
}

在母版页中,您可以使用该基类

Inherits="System.Web.Mvc.ViewMasterPage<ViewModelBase>"

并在每个视图中使用那些派生类

Inherits="System.Web.Mvc.ViewPage<Page1ViewModel>"