• 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的页面中使用。

  • 相关阅读:
    sprinboot测试类报错问题(Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...))
    实体类的命名细分
    zuul服务网关
    解决aplication.yml没有图标问题
    用户动态权限菜单管理简单实现方式
    servlet+ajax完成select二级联动/动态传值/查询分页功能
    servlet+jsp实现分页功能
    python——Django之admin的使用
    python-Django连接mysql实现可视化会出现的问题
    python——迭代器、列表解析、三元表达式
  • 原文地址:https://www.cnblogs.com/NotEnough/p/7479015.html
Copyright © 2020-2023  润新知