试想下在MVC的前端页面JS或者html中需要使用多语言,而后端的多语言是维护在资源文件中的,前端如果使用的话需要使用AJAX频繁的获取,一个页面中可能会存在大量的需要语言转换的地方,频繁使用AJAX是不靠谱的。

  参照ABP中的方式,可以使用修改PageBaseType的方式来实现。

  MVC的Page页面是继承自System.Web.Mvc.WebViewPage的,我们可以写个类来继承自这个类并修改Page的默认继承即可,在这个类中,我们增加多语言的方法。

  首先,在Views目录下新建一个类:MultiPageWebViewPageBase.cs。内容如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. namespace Mvc_Vip.Mvc
  6. {
  7. public abstract class VipViewPage<T>: System.Web.Mvc.WebViewPage<T>
  8. {
  9. public string TestTag { get { return Gxrc.Common.WebConfig.IsTest ? "t" : ""; } }
  10. public bool IsTest { get { return Gxrc.Common.WebConfig.IsTest; } }
  11. }
  12.  
  13. public abstract class VipViewPage : VipViewPage<dynamic>
  14. {
  15.  
  16. }
  17. }
  18. -----------------------------------------------------分割线------栗子2----------------------
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Resources;
  6. using System.Web;
  7. using System.Web.Mvc;
  8. using TaskManagement.Infrastructure.Extensions;
  9.  
  10. namespace TaskManagement.UI.Views
  11. {
  12. public abstract class MultiPageWebViewPageBase : MultiPageWebViewPageBase<dynamic>
  13. {
  14.  
  15. }
  16.  
  17. public abstract class MultiPageWebViewPageBase<TModel> : WebViewPage<TModel>
  18. {
  19. public ResourceManager rm = Resource.Resource.ResourceManager;
  20.  
  21. /// <summary>
  22. /// Constructor.
  23. /// </summary>
  24. protected MultiPageWebViewPageBase()
  25. {
  26.  
  27. }
  28.  
  29. /// <summary>
  30. /// Gets localized string for given key name and current language.
  31. /// </summary>
  32. /// <param name="name">Key name</param>
  33. /// <returns>Localized string</returns>
  34. protected virtual string L(string name)
  35. {
  36. return rm.GetString(name) ?? name;
  37. }
  38.  
  39. /// <summary>
  40. /// Gets localized string for given key name and current language with formatting strings.
  41. /// </summary>
  42. /// <param name="name">Key name</param>
  43. /// <param name="args">Format arguments</param>
  44. /// <returns>Localized string</returns>
  45. protected virtual string L(string name, params object[] args)
  46. {
  47. return rm.GetString(name, args) ?? name;
  48. }
  49.  
  50. /// <summary>
  51. /// Gets localized string for given key name and specified culture information.
  52. /// </summary>
  53. /// <param name="name">Key name</param>
  54. /// <param name="culture">culture information</param>
  55. /// <returns>Localized string</returns>
  56. protected virtual string L(string name, CultureInfo culture)
  57. {
  58. return rm.GetString(name, culture) ?? name;
  59. }
  60.  
  61. /// <summary>
  62. /// Gets localized string for given key name and current language with formatting strings.
  63. /// </summary>
  64. /// <param name="name">Key name</param>
  65. /// <param name="culture">culture information</param>
  66. /// <param name="args">Format arguments</param>
  67. /// <returns>Localized string</returns>
  68. protected string L(string name, CultureInfo culture, params object[] args)
  69. {
  70. return rm.GetString(name, culture, args) ?? name;
  71. }
  72. }
  73. }

  至web.config中的

  1. <system.web.webPages.razor>

下pages节,将

  1. <pages pageBaseType="System.Web.Mvc.WebViewPage">

修改为:

  1.  
  1. <pages pageBaseType="Mvc_Vip.Mvc.VipViewPage">
  1. --------------------栗子2-----------------------------------
    <pages pageBaseType="TaskManagement.UI.Views.MultiPageWebViewPageBase">

  至此,我们就可以在前端view里使用@(TestTag )  或者、@L("Field_Common_ID")的方式来使用多语言了。当然,在js中也可以这样使用:

if (confirm("@L("Msg_Common_Confirm")"))

  同样的方式,可以在该VipViewPage、或者、MultiPageWebViewPageBase添加多个公用的方法以扩展前端。

  

  缺点:这种多语言无法在单独的js文件中使用,必须在继承于MultiPageWebViewPageBase的页面中使用。

MVC的viewPage 通用属性运用。的更多相关文章

  1. 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构

      基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业 ...

  2. 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)

    http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通 ...

  3. HTML5 新增通用属性

    一:HTML5保留的常用元素 7. 表格相关元素.表格在html里还算重要的了.   <table>  :用于表格定义.    cellpadding: 单元格内容和单元格边框距离    ...

  4. MVC验证13-2个属性至少输入一项

    原文:MVC验证13-2个属性至少输入一项 有时候,我们希望2个属性中,至少有一个是必填,比如: using Car.Test.Portal.Extension;   namespace Car.Te ...

  5. [ASP.NET MVC]如何定制Numeric属性/字段验证消息

    原文:[ASP.NET MVC]如何定制Numeric属性/字段验证消息 对于一个Numeric属性/字段,ASP.NET MVC会自动进行数据类型的验证(客户端验证),以确保输入的是一个有效的数字, ...

  6. 基于EF+MVC+Bootstrap的通用后台管理系统及架构

    分享基于EF+MVC+Bootstrap的通用后台管理系统及架构 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了 ...

  7. Swing界面组件的通用属性

    ----------------siwuxie095                             Swing 界面组件(控件)的通用属性:         (1)enabled:启用/禁用 ...

  8. html5--1.19 通用属性

    html5--1.19 通用属性 学习要点: 1.通用属性的概念及几个常用的通用属性2.对属性值的若干点补充 通用属性 通用属性(全局属性)可以用于任何的HTML5元素:通用属性有十几种:这节课不会全 ...

  9. mvc中使用remote属性来做ajax验证

    mvc中使用remote属性来做ajax验证比較easy : [Remote("Action", "Controller", AdditionalFields ...

随机推荐

  1. NOI.AC 32 Sort——分治

    题目:http://noi.ac/problem/32 从全是0和1的情况入手,可以像线段树一样分治下去,回到本层的时候就是左半部的右边是1,右半部的左边是0,把这两部分换一下就行.代价和时间一样是n ...

  2. TX-

    NVIDIA Jetson TX2刷机 TX1 Gsteramer 环境配置 TX1 ssh配置

  3. vijos:P1285佳佳的魔法药水

    背景 发完了k张照片,佳佳却得到了一个坏消息:他的MM得病了!佳佳和大家一样焦急万分!治好MM的病只有一种办法,那就是传说中的0号药水……怎么样才能得到0号药水呢?你要知道佳佳的家境也不是很好,成本得 ...

  4. Scala学习——集合的使用和“_”的一些使用(中)

    1.空格加_可以表示函数的原型 命令行代码: scala> def fun1(name:String){println(name)} fun1: (name: String)Unit scala ...

  5. DCloud-HTML5+:barcode

    ylbtech-DCloud:barcode&camera 1.返回顶部 1. http://www.html5plus.org/doc/zh_cn/barcode.html 2. Barco ...

  6. .NETFramework:StringBuilder

    ylbtech-.NETFramework:StringBuilder 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken ...

  7. wpf Datagrid 的全选

    在我的一个datagrid的一列中需要全选框,所以我在样式中是这样写的: <DataGridTemplateColumn.Header> <CheckBox> <i:In ...

  8. 转:AppScan代理扫描app/H5安全测试

    1.首先设置AppScan代理,设置如下:

  9. JAVA学习笔记——(五)

    今日内容介绍 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 * ...

  10. python-根据URL地址下载文件

    博主个人网站:https://chenzhen.online 使用Python中提供的urllib.request下载网上的文件 #coding=utf-8 """ 目标 ...