MVC的viewPage 通用属性运用。
试想下在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 通用属性运用。的更多相关文章
- 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构
基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业 ...
- 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)
http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通 ...
- HTML5 新增通用属性
一:HTML5保留的常用元素 7. 表格相关元素.表格在html里还算重要的了. <table> :用于表格定义. cellpadding: 单元格内容和单元格边框距离 ...
- MVC验证13-2个属性至少输入一项
原文:MVC验证13-2个属性至少输入一项 有时候,我们希望2个属性中,至少有一个是必填,比如: using Car.Test.Portal.Extension; namespace Car.Te ...
- [ASP.NET MVC]如何定制Numeric属性/字段验证消息
原文:[ASP.NET MVC]如何定制Numeric属性/字段验证消息 对于一个Numeric属性/字段,ASP.NET MVC会自动进行数据类型的验证(客户端验证),以确保输入的是一个有效的数字, ...
- 基于EF+MVC+Bootstrap的通用后台管理系统及架构
分享基于EF+MVC+Bootstrap的通用后台管理系统及架构 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了 ...
- Swing界面组件的通用属性
----------------siwuxie095 Swing 界面组件(控件)的通用属性: (1)enabled:启用/禁用 ...
- html5--1.19 通用属性
html5--1.19 通用属性 学习要点: 1.通用属性的概念及几个常用的通用属性2.对属性值的若干点补充 通用属性 通用属性(全局属性)可以用于任何的HTML5元素:通用属性有十几种:这节课不会全 ...
- mvc中使用remote属性来做ajax验证
mvc中使用remote属性来做ajax验证比較easy : [Remote("Action", "Controller", AdditionalFields ...
随机推荐
- k8s-集群状态及部署一个实例
[root@k8s-master ~]# kubectl get csNAME STATUS MESSAGE ERRORcontroller-manager Healthy ok scheduler ...
- 1111 Online Map (30)(30 分)
Input our current position and a destination, an online map can recommend several paths. Now your jo ...
- python定时任务:apscheduler的使用(还有一个celery~)
文章摘自:https://www.cnblogs.com/luxiaojun/p/6567132.html 1 . 安装 pip install apscheduler 2 . 简单例子 # codi ...
- C#编译问题'System.Collections.Generic.IEnumerable' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument
'System.Collections.Generic.IEnumerable<string>' does not contain a definiti ...
- poco时间操作
Poco::DateTime Poco::Timespan Poco::Timestamp 时间操作 Poco::DateTime dt; //c++ 20才有 Calendar dt = dt + ...
- lwip 移植
一.源码目录结构 api . core.netif. include core下又有IPV4 . IPV6 . SNMP 和.c文件 include下又有IPV4.IPV6.LWIP.netif ne ...
- openstack开发环境搭建
1 目的 让linux下的openstack代码能在windows上面实现同步开发. 2 目标 使用samba实现window与Linux的文件共享. 3 实验环境 ...
- ActiveRecord 的类型初始值设定项引发异常
最近在研究ActiveRecord网上有很多贴子讲怎么用的.但自己照做就是出错. 最终定位在配置文件出错.应该是ActiveRecord有更新的原因.在国外的网站把配置复制了一份替换.问题解决了.我用 ...
- 原生app与WebApp的区别
Native App开发Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS.Android等不同的手机操作系统要采用不同的语言和框架进行开发,该模式通常是由 ...
- jQuery名字冲突 noConflict()方法
今天检查项目的时候发现一个jquery变量$的控制权让渡问题,原因是: 开发这个模块的同事使用了一个日历插件,把$的控制权让出了,就导致了加载完这个页面后再加载其他页面就会报出$不是一个函数的错误. ...