在Controller的Action执行前跳转
所有的Controller都应该具有一个相同的行为:能够针对没有ci参数的url实施跳转。因此自然想到实现一个基类Controller,这里我命名为BaseController,代码如下:
以下为引用的内容: public class BaseController : Controller protected override void Initialize(System.Web.Routing.RequestContext requestContext) |
以下为引用的内容: Response.Cookies.Add(new HttpCookie(CultureProvider.culturecookiekey,cultureValue.ToString())); if (cultureValue == null) } protected override IActionInvoker CreateActionInvoker() //一个IActionInvoker 的实现,MVC默认使用ControllerActionInvoker,因为在 public static class CultureProvider public static CultureInfo GetCultureInfo(string ci) |
只要所有的Controller继承这个BaseController即可。
这里需要重点指出的是CustomControllerActionInvoker类,事实上发现从这个类入手解决重定向问题花了我不少时间,为此我不得不调试MVC的源码。当然最初的想法是在每个action执行时手动判断redirectUrl,从而指导重定向,但显然,没人愿意将自己已经写好的action都拿出来一个个改,所以也就有了这个小小的探索。
页面中的链接、跳转
最后令我感到即高兴又担心的问题是:当我使用这个框架后,页面中的所有链接和跳转因素几乎都能自动在url前面加上ci参数!虽然我知道类似Html.ActionLink之类的helper有从路由表中产生url的能力,但是能够自动添加上ci,还是让我感到有点始料未及。不过,链接的url是否正确,还是要注意,有一些特殊情况。
页面中使用资源
在页面中引用资源可以直接在C#脚本中引用Resource类。这里提供一个helper。这个Html的扩展方法。
以下为引用的内容: public static class ResourceExtensions public static string Resource(this HtmlHelper htmlHelper, string expression, params object[] args) static string GetGlobalResource(ResourceExpressionFields fields, object[] args) static ResourceExpressionFields GetResourceFields(string expression, string virtualPath) |
需要注意的是这个方法默认认为Resource是资源的类名,所以必要的话需要修改
以下为引用的内容: ResourceExpressionFields fields = GetResourceFields(string.Format("Resource,{0}", expression), path); 中的"Resource,{0}" |
结语
初学MVC,甚至可以说是初学web开发。以上是我个人提出的一种方案,不知道有没有什么不足之处,还请各位看官提出见解,探讨一下。
ASP编码教程:如何实现/使用缓存
[ASP]2015年4月15日ASP编码教程:asp缓存的分类
[ASP]2015年4月15日ASP编码教程:何谓ASP缓存/为什么要缓存
[ASP]2015年4月15日ASP编码教程:asp实现的sha1加密解密代码
[ASP]2015年4月15日ASP编码教程:asp执行带参数的sql语句实例
[ASP]2015年4月14日