将Url.Action移动到Jquery / JS? (MVC Web App)

时间:2010-08-10 17:47:48

标签: jquery ajax asp.net-mvc-2 jqgrid

环境:ASP.NET 3.5,MVC 2 Web App,在View文件Index.aspx

我有以下jqGrid(代码摘录):

    $("#list").jqGrid({
        url: '<%= Url.Action("GridData") %>',
        datatype: 'json',

这是一个名为populateGrid的内联JS函数。我需要将此功能移出View并进入自己的JS。为此,我需要存储&lt;%= Url.Action(“GridData”)%&gt;作为javascript中的变量。

此:

var griddata = <%= Url.Action("GridData") %>;

似乎不起作用。我想知道我应该使用什么语法和/或我如何做到这一点。 populateGrid函数将由多个页面调用,这就是它被放入.js文件的原因。

2 个答案:

答案 0 :(得分:0)

引用一些引号:

var griddata = '<%= Url.Action("GridData") %>';

应该在那里解决你的具体问题。

答案 1 :(得分:0)

你遇到的问题是griddata变量是$(document).ready闭包的本地变量。您需要在该范围之外将其取消为全局或将其传递给js范围。所以要做到全球化,你会做:

var griddata = ... // this outside the function/closure

$(document).ready(function() {});

现在,使用所有配置变量污染全局命名空间可能不是传递此类数据的最佳方法....您可以创建一个配置对象来保存所有配置变量(包含默认值和所有配置变量)您的母版页,因此它可以为每个页面正确初始化...类似于:

var myAppConfig = {
   gridData : '<%= Url.Action("xxxx") %>',
   otherConfig : 'some more configuration here'
};

然后你可以在你的js文件中使用它