zoukankan      html  css  js  c++  java
  • MVC项目中WebViewPage的实战应用

    由于公司的项目可能会卖到国外,所以需要支持多语言。今天我就在目前的项目中实现了多语言功能,下面记录我的具体实现。

     

    1、相信很多朋友在用MVC做项目时候,都会遇到“视图必须派生自 WebViewPage 或 WebViewPage<TModel>”的错误。正如错误描述一样,MVC的视图都必须继承WebViewPage。

         自定义WebViewPage类:

         

        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// 恒通2.0 add by zhangfj 2016/12/27
        /// </remarks>
        /// <typeparam name="TModel"></typeparam>
        public abstract class HTView<TModel> : System.Web.Mvc.WebViewPage<TModel>
        {
            private ILocaleStringResourceService _localeStringResourceService
            {
                get { return Engine.Resolve<ILocaleStringResourceService>(); }
            }
            private Localizer _localizer;
            public Localizer Z
            {
                get
                {
                    if (_localizer == null)
                    {
                        _localizer = (format, args) =>
                        {
                            var resFormat = _localeStringResourceService.GetResource(format, 1);
                            if (string.IsNullOrEmpty(resFormat))
                            {
                                return new LocalizedString(format);
                            }
                            return
                                new LocalizedString((args == null || args.Length == 0)
                                                        ? resFormat
                                                        : string.Format(resFormat, args));
                        };
                    }
                    return _localizer;
                }
            }
            public override void InitHelpers()
            {
                base.InitHelpers();
            }
    
            public override string Layout
            {
                get
                {
                    var layout = base.Layout;
    
                    if (!string.IsNullOrEmpty(layout))
                    {
                        var filename = Path.GetFileNameWithoutExtension(layout);
                        ViewEngineResult viewResult = System.Web.Mvc.ViewEngines.Engines.FindView(ViewContext.Controller.ControllerContext, filename, "");
    
                        if (viewResult.View != null && viewResult.View is RazorView)
                        {
                            layout = (viewResult.View as RazorView).ViewPath;
                        }
                    }
    
                    return layout;
                }
                set
                {
                    base.Layout = value;
                }
            }
        }

    然后,在Views配置文件中配置WebViewPage视图派生类为我们的自定义类:

        <pages pageBaseType="IOV.Application.WebBiz.HTView">
          <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Optimization"/>
            <add namespace="System.Web.Routing" />
            <add namespace="IOV.Application.Web" />
          </namespaces>
        </pages>

    最后,在视图中就可以使用我们自定义的WebViewPage:

            <div class="login-container">
                <div class="loginbox">
                    <div class="loginbox-title">
                    </div>
                    <div class="loginbox-or">
                        <div class="or">@Z("Account.userLogin")@*用户登录*@</div>
                    </div>
    
                    <div class="loginbox-textbox">
                        <input type="text" class="form-control" placeholder="@Z("Account.userName")@*用户名*@" id="txtLoginName" value="admin" />
                    </div>
                    <div class="loginbox-textbox">
                        <input type="password" class="form-control-pwd" placeholder="@Z("Account.pwd")@*密码*@" id="txtPassWord" value="123456" />
                    </div>
    
                    <div class="col-xs-12"><span class="error-info text-danger" id="lblmsgLogin" style="margin-left: 5px"></span></div>
    
                    <div class="loginbox-submit" style=" 100%; padding-left: 20px">
                        <input type="button" id="btnLogin" class="btn btn btn-block" onclick="DoLogin()" value="@Z("Account.login")@*登录*@">
                    </div>
                </div>
                <div class="logobox">
                    @@Copyright 2016 重庆XXXXXXX公司
    
                </div>
            </div>
  • 相关阅读:
    Oracle的分区打点
    学习Struts2经验总结
    优化MVC,实现数据库表的记录的添加、删除、修改、查询。
    基于struts研究传值问题
    基于“MVC”框架集设计模式,开发用户管理系统!
    使用Struts,实现简单的登录
    QT学习4:使用窗口部件
    QT学习9:绘制函数
    QT学习8:准备战斗
    QT学习6:组装丰富的积木!
  • 原文地址:https://www.cnblogs.com/fjzhang/p/6226475.html
Copyright © 2011-2022 走看看