[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
。谢谢。
答案 0 :(得分:0)
你能做的是:
如需更多参考,请访问:Implementing Client Callbacks Programmatically Without Postbacks in ASP.NET Web Pages
答案 1 :(得分: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
的{{1}}方法完成此操作 - 如果XmlTag
不太正确,您可能需要使用其他方法。
答案 2 :(得分:0)
为什么不设置一个断点并附加到w3wp进程并调试,然后你可以看到变量的值?
答案 3 :(得分: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;
}
}
注意事项:
JavaScriptSerializer
类)以确保服务器端变量lstXmlTags
在将其传递给cilent side函数之前已正确编码<script type="text/javascript">
标签,因为你已将RegisterClientScriptBlock
函数的最后一个参数传递为true,这意味着(我引用文档):一个布尔值,指示是否为添加脚本标记。因此,如果您将此设置为true,则该方法已经为您添加了这些标记,您不应该再次手动添加它们。JSON.stringify
方法。此方法本身内置于所有现代浏览器中,并允许将javascript变量定义转换为字符串,以便您获得友好的显示。但是,如果您愿意,您当然可以直接使用该变量:alert({0}[1].SomeProperty);
将显示集合中第二个元素的某些属性。 备注:出于调试目的,最好使用console.log
和一个javascript调试工具(如FireBug),而不是使用某些模态窗口进行警报。