Asp.net mvc 4 如何将用户首选项传递到MVC4中的每个视图,而无需手动将其添加到我的数百个viewmodels中
我为用户存储了首选项(日期格式、语言、货币符号等)。 现在,在我的视图中,我需要使用这些首选项来显示日期或使用正确的符号显示货币 问题是,由于我有数百个viewmodels(实际上是models和viewmodels的混合体),为了在我的视图中有这个preferences对象,我需要在每个VM中添加一个属性,并在控制器中加载该属性。这会管用,但有点臭 我想让我的所有ViewModel都继承自一个可以设置preferences属性的Asp.net mvc 4 如何将用户首选项传递到MVC4中的每个视图,而无需手动将其添加到我的数百个viewmodels中,asp.net-mvc-4,Asp.net Mvc 4,我为用户存储了首选项(日期格式、语言、货币符号等)。 现在,在我的视图中,我需要使用这些首选项来显示日期或使用正确的符号显示货币 问题是,由于我有数百个viewmodels(实际上是models和viewmodels的混合体),为了在我的视图中有这个preferences对象,我需要在每个VM中添加一个属性,并在控制器中加载该属性。这会管用,但有点臭 我想让我的所有ViewModel都继承自一个可以设置preferences属性的BaseViewModel。这将帮助我定义一次属性,但一旦VM实例
BaseViewModel
。这将帮助我定义一次属性,但一旦VM实例化,我仍然需要在每个控制器的操作中加载它
那么,我应该如何避免这种情况并在所有视图中访问首选项?
这可能是对
ViewData
的一个很好的使用,并且在动作过滤器中“注入”了首选项
对象?好吧,我最终以这种方式创建了一个动作过滤器:
public class IncludePreferencesAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var controller = filterContext.Controller as MyBaseController;
if (controller != null)
{
controller.ViewBag.MyPref = controller.GetUserPreferences();
}
}
}
在控制器操作中,我需要使用首选项,我用[IncludePreferences]
修饰它
然后,在我看来:
@{
var pref = ViewBag.MyPref as MyPreferences;
}
这样,我就不需要更改ViewModels,只需在需要首选项的操作上加载它。操作过滤器可能是最好的方法。Viewbag或ViewData,无论哪种方式。。。