0
 [WebMethod]
 public string LoadLayout()
 {
        try
        {
            List<XmlTag> lstXmlTags = new List<XmlTag>();
            lstXmlTags = parser.GetXmlTags(filePath);

            string script = "<script type=\"text/javascript\">alert(lstXmlTags );</script>";
            System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "test", script, true);

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

我想提醒lstXmlTags测试目的。以上代码在本地运行,但在服务器中出现问题。我认为在服务器中它无法获取filepath。所以我想提醒lstXmlTags返回什么或者它是空的。所以我添加RegisterClientScriptBlock以显示结果.但我尝试给我语法错误。我无法使用。谢谢RegisterClientScriptBlock

4

4 回答 4

0

你可以做的是:

  1. 通过 JavaScript 调用 Web 方法
  2. 当 web 方法返回或完成时调用警报或其他任何东西。

有关更多参考,请访问:在 ASP.NET 网页中以编程方式实现客户端回调而无需回发

于 2013-01-11T05:38:00.153 回答
0

您正在尝试做的事情不会按原样工作。问题是,当您执行时alert(lstXmlTags),它会尝试找到一个名为 的变量lstXmlTags,该变量不存在,并且往往会解释您遇到的错误。

我会做的是这样的:

string lstXmlTagsText = string.Join("\n", lstXmlTags.Select(t => t.ToString()).ToArray());
string script = "<script type=\"text/javascript\">alert(" + lstXmlTagsText + ");</script>";

然后像以前一样注册脚本。关键是将List<XmlTag> lstXmlTags对象转换为某种人类可读的形式。您会注意到我刚刚使用ToString每个方法完成了此操作 - 如果不太正确XmlTag,您可能需要使用不同的方法。ToString

于 2013-01-11T05:59:28.670 回答
0

为什么不直接设置断点并附加到 w3wp 进程并进行调试,然后您就可以看到变量的值了?

于 2013-01-11T06:31:02.047 回答
0

您似乎将客户端变量与服务器端混合在一起。这是您可以实现这一目标的一种方法:

[WebMethod]
public string LoadLayout()
{
    try
    {
        List<XmlTag> lstXmlTags = parser.GetXmlTags(filePath);
        var serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(lstXmlTags);

        string script = string.Format("alert(JSON.stringify({0}));", json);
        System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "test", script, true);

    }
    catch (Exception ex)
    {
        throw ex;
    }
}

这里需要注意的事项:

  • 我使用了 JSON 序列化程序(内置JavaScriptSerializer类)来确保在将服务器端变量lstXmlTags传递给 cilent 端函数之前对其进行正确编码
  • 我已经摆脱了<script type="text/javascript">标签,因为您已将 true 作为RegisterClientScriptBlock函数的最后一个参数传递,这意味着(我从文档中引用):一个布尔值,指示是否添加脚本标签。因此,如果您将此设置为 true,则该方法已经为您添加了这些标签,您不应再次手动添加它们。
  • 我已经使用JSON.stringify了警报函数中的方法。此方法原生内置于所有现代浏览器中,并允许将 javascript 变量定义转换为字符串,以便您获得友好的显示。但是,如果您愿意,当然可以直接使用该变量:alert({0}[1].SomeProperty);将显示集合中第二个元素的某些属性。

备注:出于调试目的,最好使用console.logjavascript 调试工具(例如 FireBug),而不是使用一些模式窗口进行警告。

于 2013-01-11T06:41:12.570 回答