试图运行我的codebehind编写的javascript

时间:2012-06-15 16:45:54

标签: c# javascript asp.net code-behind

我正在尝试运行一些由我的代码隐藏文档创建的javascript代码。

<script type="text/javascript">

    function GetMap() {
        //some javascript
    }

    function AssetDescription(var1, var2, var3) {
        //some javascript using var1, var2, and var3
    }

    function test() {
        alert("test position 1");
        var onloadText = document.getElementById("points").value;
        alert(onloadText);
        eval(onloadText);
        alert("after eval");
    }
    window.onload = test;
</script>

<body runat="server">
<input type="hidden" id="points" runat="server" />
</body>

代码隐藏

protected void Page_Load(object sender, EventArgs e) {
    points.Attributes.Add("value", Iterations());
}

public string Iterations() {
    string toReturn = "GetMap(); \n";
    //assetRow is an array of strings. The strings are in the format "var1, var2, var3"
    for (i=0; i<numberOfAssets; i++)
    {
        toReturn = toReturn + "AssetDescription("+assetRow[i]+"); \n";
    }
    return toReturn;
}

希望我已尽可能清楚地完成所有这些工作。这是我认为与我的问题相关的所有代码。我愿意采取其他方式来解决这个问题。

我已经尝试将body.onload元素设置为直接从代码隐藏中包含我的javascript,但无济于事。我想直接在我的标签中添加此代码,但我不认为ASPX具有该功能,因此这是我创建的解决方法。

这似乎是我找到的最有前途的方法。我搜索了这些论坛,大多数人都说eval()是个坏主意。不用说,它甚至没有工作。但如果有的话,我会喜欢更强大的替代品。

alert("after eval")警报从不会触发,但alert("test position 1")alert(onloadText)都会触发。

1 个答案:

答案 0 :(得分:1)

而不是将其设置为和html元素并使用eval运行它,您可以创建一个公共变量,并将公共变量打印到页面上。这将意味着将打印变量的字符串内容,这将是要运行的JavaScript。

所以前端

<script type="text/javascript">

    function GetMap() {
        //some javascript
    }

    function AssetDescription(var1, var2, var3) {
        //some javascript using var1, var2, and var3
    }

    function test() {
        alert("test position 1");
        <%= generatedScript %>
        alert("after eval");
    }
    window.onload = test;
</script>

<body runat="server">
<input type="text" id="points" runat="server" />
</body>

背后的代码

public string generatedScript = string.empty;

public string Iterations() {
    string generatedScript = "GetMap(); \n";
    //assetRow is an array of strings. The strings are in the format "var1, var2, var3"
    for (i=0; i<numberOfAssets; i++)
    {
        generatedScript = generatedScript + "AssetDescription("+assetRow[i]+"); \n";
    }
}

应该没事!