自定义Razor engine,自定义标签,就像nopcommerce里的@T("key")实现多国语

首先需要一个abstract class WebViewPage ,继承WebViewPage<T>

namespace Loyalty.MemberPortal.Web.Helpers

{

public abstract class WebViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel>

{

//委托,必要,返回一个IHtmlString

public delegate IHtmlString
Localizer(string key, string range);

private Localizer
_localizer;

public Localizer T

{

get

{

return (key, range) =>

{

//此段为逻辑,这边是我实现localization的代码,用了httpruntime cache,你可以写你自己的方式

var _cacheManager = new MemoryCacheManager();

List<FakeResourceTable> homePage = _cacheManager.Get(range, () =>

{

var _mamageLocalization = new ManageLocalization();

return _mamageLocalization.GetHome();

});

var languageInstance = HttpContext.Current.Request.Cookies["languageCode"];

var languageCode = languageInstance == null ? 0 : languageInstance.Value.TransferLanguageCodeToId();

var value = homePage.Where(m => m.Key == key && m.LanguageId == languageCode).FirstOrDefault().Value;

return new HtmlString(value);

};

}

}

public override void InitHelpers()

{

base.InitHelpers();

}

public override string Layout

{

get

{

var layout = base.Layout;

return layout;

}

set

{

base.Layout = value;

}

}

}

//必要,为WebViewPage必要元素

public abstract class WebViewPage : WebViewPage<dynamic>

{

}

}

然后比较重要的一步,是在web.config文件中加入次engine,这个web.config是View中的,不是project中的那个

<system.web.webPages.razor>

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

//原来的,默认的

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

<pages pageBaseType="Loyalty.MemberPortal.Web.Helpers.WebViewPage">

<namespaces>

<add namespace="System.Web.Mvc" />

<add namespace="System.Web.Mvc.Ajax" />

<add namespace="System.Web.Mvc.Html" />

<add namespace="System.Web.Routing" />

</namespaces>

</pages>

</system.web.webPages.razor>

然后在我们的VIEW上就可以调用了

@T("joinnow", "homePage")//参数对应T(a,b)方法的参数

时间: 2024-08-08 21:50:45

自定义Razor engine,自定义标签,就像nopcommerce里的@T("key")实现多国语的相关文章

自定义html中a标签的title提示tooltip

自定义html中a标签的title提示tooltip 简介 用简单的jquery+CSS创建自定义的a标签title提示,用来代替浏览器默认行为.如图: Javascript代码 </pre><pre name="code" class="javascript">$(function() { $("a[title]").each(function() { var a = $(this); var title = a.att

django自定义过滤器及模板标签

创建一个模板库 不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构). 创建一个模板库分两步走: 第一,决定模板库应该放在哪个Django应用下. 如果你通过 manage.py startapp 创建了一个应用,你可以把它放在那里,或者你可以为模板库单独创建一个应用. 我们更推荐使用后者,因为你的filter可能在后来的工程中有用. 无论你采用何种方式,请确保把你的应用添加到 INSTALLED_APPS 中. 我们稍后会解释这一点. 第二,在适当的Dja

Django(自定义过滤器和自定义标签)

模版是一个用django模版语言标记过的python字符串.模版可以包含模版标签和变量. 模版标签是在一个模版里起作用的标记.比如,一个模版标签可以产生控制结构的内容(if或者for),可以获取数据库内容或者访问其它模版标签. 一个标签块被{%%}包围 变量标签被{{}}包围 context是一个传递给模版的key-value对. 模版渲染是通过从context获取值来替换模版中变量并执行所有的模版标签. 创建自定义标签目录 首先在app底下创建一个templatetags目录,添加一下两个.p

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例 EL表达式 1.获取域对象中的值 2.EL表达式支持运算 ${ num1 + num2 } EL获取常用的WEB对象 1.pageScope 获取page域对象的值 2.requestScope 获取request域对象的值 3.sessionScope 获取session域对象的值 4.applicationScope 获取application域对象的值 * 例子:向某个域中来存入值 req

Django中的tags,母版和继承,组件,静态文件相关,自定义simpletag和自定义inclusion_tag

Tags for <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul> for循环可用的一些参数: Variable Description forloop.counter 当前循环的索引值(从1开始) forloop.counter0 当前循环的索引值(从0开始) forloop.revcounter 当前循环的倒序索引值(从1开始) forloop.rev

自定义进阶2——自定义View显示超大图片

上一节(自定义初学5--自定义View显示图片)已经说了如何自定义View显示图片.做android时,加载图片是避免不了的,加载网络图片还需要异步加载,最烦人的就是经常出现OOM,为了避免这样的问题,我们一般这样解决: 根据图片控件的大小对图片进行压缩显示. 如果图片数量非常多,则会使用LruCache等缓存机制,将所有图片占据的内容维持在一个范围内. 有时加载图片还会遇到特殊情况--就是单个图片非常巨大,还不允许压缩.那么对于这种需求,该如何做呢? 首先不压缩,按照原图尺寸加载,那么屏幕肯定

自定义组件-preference 自定义(设置-关于-系统更新)的preference

有些用户在安装好Android SDK后,打开Android SDK Manager下载API时一直显示"Done loading packages"却迟迟不能前进.自己也出现了这种情况,把自己成功解决此问题的方法分享给大家. 方法/步骤 用户需要首先打开已下载的安卓SDK管理器"Android SDK Manager",然后点击菜单栏中的"Tools"菜单选项,接下来只需选择"Options"选项即可打开设置窗体. 接下来,

Android自定义单选,自定义选中状态

如图,此布局用GrildView实现,弹出框由Activity的dialog样式实现. 屏蔽系统GrildView点击背景黄色: grildview.setSelector(new ColorDrawable(Color.TRANSPARENT)); 实现数据源自定义Adapter public class PeoPleNumAdapter extends BaseAdapter { public List<PeopleNum> FiltArray; public static HashMap

Dialog详解(包括进度条、PopupWindow、自定义view、自定义样式的对话框)

Android中提供了多种对话框,在实际应用中我们可能会需要修改这些已有的对话框.本实例就是从实际出发,展现了andorid中大部分对话框,代码中用了一个对话框管理类来做封装,其中还定义了对话框的动画.自定义样式等等. 主布局文件(全是button) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.co