Javascript Revealing Module中的ASP.NET RootPath属性@ Url.Content(“〜/”)

时间:2013-10-14 13:17:59

标签: javascript jquery asp.net-mvc asp.net-mvc-4 razor

我正在尝试将所有javascript ajax调用合并到Javascript Revealing Module中。 但是,有一个名为RootPath的全局javascript属性,它使用inpage脚本标记硬编码到View页面中:

var RootPath = '@Url.Content("~/")';

在一个单独的.js文件中,我正在创建从服务器端获取JSON的调用。

    var dataService = function () {
        var url = RootPath + "API/GetData",
        getData = function () {
            return $.getJSON(url);
        };

        return {
            getData: getData
        };
}();

问题是在Javascript对象中,这个全局RootPath是未定义的。如何在我的对象中获取此全局属性?

4 个答案:

答案 0 :(得分:0)

我过去使用过这种方法效果很好:

<base href="@string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"))">

您不需要为每个请求指定它。

基本标签的定义:http://www.w3schools.com/tags/tag_base.asp

答案 1 :(得分:0)

尝试将全局变量放在页面顶部/ layout.cs html;

<html><head>
</script type="text/javascript">
var RootPath = '@Url.Content("~/")';
</script>
<script src="my_jsfiles" type="text/javascript">

<head>

始终可以从页面的所有位置访问顶层的js

答案 2 :(得分:0)

如果你真的想使用那个“全局”的RootPath变量,你可以做的一件事就是这个,

window.rootPath = '@Url.Content("~/")';

(这应该在布局页面中,或者在你知道它比javascript文件首先运行的地方),然后在你的javascript文件上做,

var dataService = function () {
        var url = window.rootPath + "API/GetData",
        getData = function () {
            return $.getJSON(url);
        };

        return {
            getData: getData
        };

答案 3 :(得分:-1)

你能试试吗?

    var dataService = function () {
        var url = "/API/GetData",
        getData = function () {
            return $.getJSON(url);
        };

        return {
            getData: getData
        };
}();

请注意我已删除RootPath变量并直接使用var url = "/API/GetData" ..试试这个我认为它应该有效