在使用Ajax加载的ASP.NET用户控件中分配外部JavaScript变量

时间:2015-07-09 20:30:40

标签: javascript c# jquery asp.net ajax

我有一个用户控件,用于分配在另一个脚本文件中定义的JavaScript变量。此用户控件由ASP.NET通用处理程序编译为HTML,然后由标记容器中的JQuery Ajax粘贴其标记。问题是分配脚本没有粘贴编译的用户控件HTML。这是我的JavaScript代码,它位于JavaScript文件中:

var xyz;
function initEnvironment(){
$.ajax({
        url: handlerURL,
        type: "POST",
        data: JSON.stringify(
            {
                XSRFToken: xsrf_token,
                Data: ajaxData
            })
        ,
        dataType: "json",
        cache: true,
        async: IsAjaxAsync,
        beforeSend: null,
        success: function (data) {
                $('#containerDiv').html(data); //this must contain assignment statement for xyz
                alert(xyz); //xyz is null here
        }
    });
}

这是用户控制C#代码,应该分配变量:

Literal1.Text = litHtml + @"<script type='text/javascript'>
            xyz = " + xyz + ";</script>";

litHtml包含一些成功粘贴在容器中的HTML代码,但连接的脚本代码没有粘贴。可能是什么原因?

更新

JavaScript端的

xyz是一个JSON对象。

1 个答案:

答案 0 :(得分:0)

不是使用脚本标记的文字设置xyz,而是尝试使用RegisterStartup脚本来执行将设置它的函数。您可能必须对json对象进行解码和编码。

服务器端

ClientScriptManager cs = Page.ClientScript;
cs.RegisterStartupScript(this.GetType(), "SetXYZ", "SetXYZ(" + xyz + ")");

客户端

function SetXYZ(xyzVal)
{
  xyz = xyzVal;
}

您也可以简单地执行此操作

cs.RegisterStartupScript(this.GetType(), "SetXYZ", @"<script type='text/javascript'>
        xyz = " + xyz + ";</script>");