1

我为用户存储了首选项(日期格式、语言、货币符号等)。现在,在我看来,我需要使用这些首选项来显示日期或使用正确的符号显示货币。

问题是,由于我有数百个视图模型(实际上是模型和视图模型的混合),为了在我的视图中拥有此首选项对象,我需要在每个 VM 中添加一个属性并将该属性加载到控制器中。这会起作用,但有点臭。

我想让我的所有视图模型都继承自BaseViewModel可以设置首选项属性的位置。这将帮助我定义一次属性,但是一旦虚拟机被实例化,我仍然需要在每个控制器的操作中加载它。

那么,我应该怎么做才能避免这种情况并访问我所有视图中的首选项?

这可能是在动作过滤器中很好地使用并将对象ViewData“注入”到其中吗?Preferences

4

1 回答 1

0

好吧,我最终以这种方式创建了一个动作过滤器:

public class IncludePreferencesAttribute : ActionFilterAttribute
{       
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
        var controller = filterContext.Controller as MyBaseController;

        if (controller != null)
        {
           controller.ViewBag.MyPref = controller.GetUserPreferences();
        }
    }
}

在 Controller 操作中,我需要使用我用[IncludePreferences].

然后,在我看来:

@{
   var pref = ViewBag.MyPref as MyPreferences;
}

这样,我不需要更改我的 ViewModel,并且只在需要首选项的那些操作上加载它。

于 2013-03-04T01:48:44.563 回答