在Asp.Net MVC 中如何用JS訪問Web.Config中appSettings的值

應用場景:web

不少時候咱們要在Web.Config中添加appSettings的鍵值對來標識一些全局的信息,好比:調用service的domain,跳轉其餘網站頁面的url 等等;app

那麼此時就涉及到了一個問題,如何在JS中去訪問這些config信息?dom

咱們主要的思路就是:在後臺讀取appSetting的值保存在ViewBag中,而後前臺JS直接去訪問ViewBag所對應的值。ide

詳細信息請看以下三種解決方案:網站

解決方案1):url

向FilterConfig添加註冊,在Action Result執行以前,將獲取的appSetting的值保存到ViewBag中spa

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

 

而後將RegisterUrlConfig添加到FilterConfig中(默認狀況下FilterConfig在project項目初期會存在App_Start文件夾下)code

    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中)blog

        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 + '......';    
相關文章
相關標籤/搜索