应用场景: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 + '......';