2013-03-20 44 views
5

是否可以在ASP.NET MVC4 Razor项目的JavaScript文件中使用下面的“serverPath”之类的web.config设置?如何使用ASP.NET MVC4 Razor项目中的web.config文件中的值更新JavaScript?

<appSettings> 
    <add key="serverPath" value="http://myserver" /> 
</appSettings> 

我想这取决于调试更改下面的jQuery Ajax调用的URL或释放模式

var request = $.ajax({ 
    url: 'http://myserver/api/cases', 
    type: 'GET', 
    cache: false, 
    dataType: 'json' 
    }); 

是可以从web.config中读取值像查看和替换它在.js文件中?

+0

没有任何问题的答案能帮你吗? – 2013-03-22 08:14:42

回答

5

另一种方法是让一个js文件co ntains在web.config中做了一个.net网站的方式配置:

configuration.js

var configuration = { 
    apiurl: 'http://myserver/api/', 
    someOtherSetting: 'my-value' 
}; 

嗯,你既可以写配置到您的网页,如JavaScript或链接脚本或合并并缩小为一个通用文件。它将成为部署过程的一部分。

然后使用它,就像任何JS对象:

var request = $.ajax({ 
    url: configuration.apiurl, 
    type: 'GET', 
    cache: false, 
    dataType: 'json' 
}); 

或其某种变体。

+0

虽然这会起作用,但我更愿意将所有配置信息集中在web.config文件中,该文件可以自动为调试和发布模式配置不同的配置。 – ChrisP 2013-03-20 16:59:42

+0

为了允许为不同的配置模式选择不同的版本(debug/release/etc),你可以使用“configurationFileName”的web.config设置并在configuration.debug.js和configuraiton.release.js之间切换,作为appSetting。然后使用该值来动态选择静态JS文件的路径。 – Arkaine55 2015-11-18 21:25:37

+0

这当然是一个选项@ Arkaine55。对于我们的自动构建场景,我们将模板配置为生成正确的配置文件。它*确实*有道理得到不同版本的文件,虽然:) – 2015-11-19 04:14:35

1

当然,在您的视图中使用这样的:

@ConfigurationManager.AppSettings["serverPath"] 

对于通过传递给外部JS文件,你需要你的函数有一个参数,并通过您的观点称之为:

<script type="text/javascript"> 
    getData('@ConfigurationManager.AppSettings["serverPath"]'); 
</script> 

当您的js文件有这样的事情:

function getData(path) { 
    var request = $.ajax({ 
     url: path, 
     type: 'GET', 
     cache: false, 
     dataType: 'json' 
    }); 

    return request; 
} 
0

试试这个:

var request = $.ajax({ 
    url: '@(ConfigurationManager.AppSettings["serverPath"])', 
    type: 'GET', 
    cache: false, 
    dataType: 'json' 
    }); 
+0

由于JavaScript处于链接到视图中的单独.js文件中,因此它不会显示此功能。 @ConfigurationManager ...仍然在渲染页面中。 – ChrisP 2013-03-20 16:40:38

1

理想情况下,你会在控制器中读出的值:

var serverPath = ConfigurationManager.AppSettings.Get("serverPath"); 

然后用该值

myViewModel.ServerPath = serverPath; 
return View(myViewModel); 

并在视图简单地将其送到JS设置视图模型的财产:

var request = $.ajax({ 
    url: '@(Model.ServerPath)', 
    type: 'GET', 
    cache: false, 
    dataType: 'json' 
    }); 
+0

这是一个链接到View的独立JavaScript文件,因此JavaScript不在视图中。我不认为在.js文件中可以访问Modle,但我不确定。 – ChrisP 2013-03-20 16:36:31

+0

在这种情况下,您将使用Linus的方法并将其传递到您的JS文件中的方法中: 2013-03-20 17:07:06

0

你可以这样做,对于ASP.NET MVC4剃刀:

@{ 
    var apiBaseUrl = ConfigurationManager.AppSettings.Get("ApiBaseUrl"); 
} 

<script type="text/javascript"> 
    $(document).ready(function() { 

     var request = $.ajax({ 
      url: '@apiBaseUrl/cases', 
      type: 'GET', 
      cache: false, 
      dataType: 'json' 
     }); 

    }); 
</script> 
相关问题