0

コードビハインド ドキュメントによって作成された 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)が発生します。

4

1 に答える 1

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";
    }
}

いいはず!

于 2012-06-15T16:56:38.383 に答える