我创建了一个XML文件作为我的语言字典,在基本控制器中,我将XML文件中的正确翻译加载到字典中,然后将其保存在Session中,并在每个View中加载Session,如下所示:
Dictionary<string, string> lang = (Dictionary<string, string>)Session["language"];
而不是我使用@lang [“Edit”]或@lang [“Create”]
的标签它工作但我在每个视图中重复此代码
Dictionary<string, string> lang = (Dictionary<string, string>)Session["language"];
我有没有写过那段代码而不重复它? 顺便说一下,我知道全球化和本地化,但它不仅仅是翻译,因为我想将这些代码用于其他事情。
答案 0 :(得分:0)
我不知道这是否适合您,因为您的问题混合了控制器和视图这两个术语。我会假设你的意思是“控制器动作”你所说的观点。
您可能想要做的是创建一个动作过滤器。因为您已经拥有一个非常简单的基本控制器,所以只需创建一个类似于以下的方法:
protected override void OnResultExecuting( ResultExecutingContext filterContext )
{
base.OnResultExecuting( filterContext );
if( filterContext.Result is ViewResult || filterContext.Result is PartialViewResult )
{
ViewBag.Lang = (Dictionary<string, string>)Session["language"];
}
}
然后在您的视图中,通过ViewBag引用它。
@ViewBag.Lang["Create"]
OnResultExecuting方法将在为从基本控制器继承的任何操作生成ActionResult之前运行。
我添加了一些额外的代码以确保调用方法的基本版本,并确保在返回View或Partial View时只设置Lang
属性。这样,如果您返回类似RedirectResult或RedirectToActionResult的内容,则不会产生任何从会话中获取字典的开销。