應用場景: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 + '......';