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

Assign an outside JavaScript variable inside a ASP.NET user control that is loaded using Ajax

本文关键字:加载 Ajax NET 控件 用户 使用 变量 ASP 分配 外部 JavaScript      更新时间:2023-09-26

我有一个用户控件,它分配一个JavaScript变量,该变量定义在另一个脚本文件中。此用户控件由ASP. exe程序编译。. 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代码,但连接的脚本代码没有粘贴。原因是什么呢?

xyz在JavaScript端是一个JSON对象

不要使用script标记的文字来设置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>");