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

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

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Mvc_Vip.Mvc
{
public abstract class VipViewPage<T>: System.Web.Mvc.WebViewPage<T>
{
public string TestTag { get { return Gxrc.Common.WebConfig.IsTest ? "t" : ""; } }
public bool IsTest { get { return Gxrc.Common.WebConfig.IsTest; } }
} public abstract class VipViewPage : VipViewPage<dynamic>
{ }
}
-----------------------------------------------------分割线------栗子2----------------------
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Resources;
using System.Web;
using System.Web.Mvc;
using TaskManagement.Infrastructure.Extensions; namespace TaskManagement.UI.Views
{
public abstract class MultiPageWebViewPageBase : MultiPageWebViewPageBase<dynamic>
{ } public abstract class MultiPageWebViewPageBase<TModel> : WebViewPage<TModel>
{
public ResourceManager rm = Resource.Resource.ResourceManager; /// <summary>
/// Constructor.
/// </summary>
protected MultiPageWebViewPageBase()
{ } /// <summary>
/// Gets localized string for given key name and current language.
/// </summary>
/// <param name="name">Key name</param>
/// <returns>Localized string</returns>
protected virtual string L(string name)
{
return rm.GetString(name) ?? name;
} /// <summary>
/// Gets localized string for given key name and current language with formatting strings.
/// </summary>
/// <param name="name">Key name</param>
/// <param name="args">Format arguments</param>
/// <returns>Localized string</returns>
protected virtual string L(string name, params object[] args)
{
return rm.GetString(name, args) ?? name;
} /// <summary>
/// Gets localized string for given key name and specified culture information.
/// </summary>
/// <param name="name">Key name</param>
/// <param name="culture">culture information</param>
/// <returns>Localized string</returns>
protected virtual string L(string name, CultureInfo culture)
{
return rm.GetString(name, culture) ?? name;
} /// <summary>
/// Gets localized string for given key name and current language with formatting strings.
/// </summary>
/// <param name="name">Key name</param>
/// <param name="culture">culture information</param>
/// <param name="args">Format arguments</param>
/// <returns>Localized string</returns>
protected string L(string name, CultureInfo culture, params object[] args)
{
return rm.GetString(name, culture, args) ?? name;
}
}
}

  至web.config中的

<system.web.webPages.razor>

下pages节,将

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

修改为:


 <pages pageBaseType="Mvc_Vip.Mvc.VipViewPage">
--------------------栗子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. BZOJ_3935_Rbtree

    https://lydsy.com/JudgeOnline/problem.php?id=3935 分析: 如果知道更改后的状态,那么代价和是否合法都能求出来 对不合法的情况也设一个估价函数. 随机这 ...

  2. BZOJ_1025_[SCOI2009]游戏_DP+置换+数学

    BZOJ_1025_[SCOI2009]游戏_DP+置换 Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按 顺序1 ...

  3. Linux的学习思路

    自学嵌入式确实不大现实(当然也不是说没有这个可能),毕竟嵌入式难度也是比较大的. 嵌入式的应用主要是几个方向, 一是系统开发:侧重开发环境搭建.内核原理.交叉编译等: 二是嵌入式Linux应用开发:侧 ...

  4. hdu水仙花

    水仙花数 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission ...

  5. 转:Serializable---序列化

    Serializable        今天在看代码的时候,看到[Serializable],不明白是什么意思.查阅了网上的一些资料,才明白这是指给类添加序列化的特性,即添加后它就可以进行序列化,那什 ...

  6. 一步步实现 Prism + MEF(二)--- 绑定命令

    Prism程序集为我们提供了DelegateCommand命令,使用该命令可实现窗口直接绑定.第一步:在ViewModel中定义一个DelegateCommand属性. public Delegate ...

  7. C#闪动任务栏的方法

    用FlashWindowEx可以实现窗口的闪烁,结构如下: /// <summary> /// 闪烁窗口 /// </summary> /// <param name=& ...

  8. Linux&nbsp;rpm&nbsp;命令参数使用…

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的"添加/删除程序" rpm 执行安装包 二进制包(Binary)以及源代码 ...

  9. 在Spring环境下存取properties文件…

    Spring中PropertyPlaceholderConfigurer的使用 (1) 基本的使用方法是 classpath:/spring/include/dbQuery.properties 其中 ...

  10. VC代码生成里面的/MT /MTd /MD /MDd的意思

    VC代码生成里面的/MT /MTd /MD /MDd的意思. 意思上已经很明白了.但是往往很多人弄不清楚到底怎么选择. /MT是 "multithread, static version ” ...