zoukankan      html  css  js  c++  java
  • 在Asp.Net MVC 中如何用JS访问Web.Config中appSettings的值

    应用场景:

    很多时候我们要在Web.Config中添加appSettings的键值对来标识一些全局的信息,比如:调用service的domain,跳转其他网站页面的url 等等;

    那么此时就涉及到了一个问题,如何在JS中去访问这些config信息?

    我们主要的思路就是:在后台读取appSetting的值保存在ViewBag中,然后前台JS直接去访问ViewBag所对应的值。

    详细信息请看如下三种解决方案:

    解决方案1):

    向FilterConfig添加注册,在Action Result执行之前,将获取的appSetting的值保存到ViewBag中

        public class RegisterUrlConfig : ActionFilterAttribute
        {
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                filterContext.Controller.ViewBag.RegisterUrl = ConfigurationManager.AppSettings["SomeKeyName"];
            }
        }

    然后将RegisterUrlConfig添加到FilterConfig中(默认情况下FilterConfig在project项目初期会存在App_Start文件夹下)

        public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
                filters.Add(new RegisterUrlConfig());
            }
        }

    最后在Application_Start 中完成 FilterConfig的调用注册(默认情况下Application_Start 在Global.asax.cs中)

            protected void Application_Start()
            {
                AutofacConfig.Register();
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }

    之后我们就可以用JS对ViewBag中的值进行读取了

            var regUrl = @Html.Raw(Json.Encode(ViewBag.RegisterUrl));    

    解决方案2):

    添加BaseController,并且在其中完成对ViewBag的赋值,然后让其他Controller继承之

        public class BaseController : Controller
        {
            protected override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                 ViewBag.WebServiceURL = ConfigurationManager.AppSettings["SomeKeyName"] != null ? ConfigurationManager.AppSettings["SomeKeyName"].ToString() : "";
            }
        }

    之后我们就可以用JS对ViewBag中的值进行读取了

            var wsUrl = @Html.Raw(Json.Encode(ViewBag.WebServiceURL));    

    解决方案3):

    在HomeController中提供添加静态脚本数据的方法

        public class HomeController : Controller
        {
            /// <summary>
            /// 静态脚本数据
            /// </summary>
            public JavaScriptResult EricSunData()
            {
                var webServiceURL = ConfigurationManager.AppSettings["SomeKeyName"] != null ? ConfigurationManager.AppSettings["SomeKeyName"].ToString() : "";
    
                var data = new
                {
                    WebServiceURL = webServiceURL
                };
    
                var js = "var EricSunData = " + new JavaScriptSerializer().Serialize(data);
    
                return JavaScript(js);
            }
        }

    然后在对应的页面中或者Layout全局添加这个静态脚本

        <script src="~/Home/EricSunData"></script>

    之后我们就可以直接读取这个静态JS中存贮的值了

        var url = EricSunData.WebServiceURL + '......';    
  • 相关阅读:
    SpringMVC
    SpringMVC
    SpringMVC
    SpringMVC
    JavaWeb
    SpringMVC
    SpringMVC
    Spring
    Spring
    Spring
  • 原文地址:https://www.cnblogs.com/mingmingruyuedlut/p/6050886.html
Copyright © 2011-2022 走看看