alert in WebMethod
本文关键字:WebMethod in alert | 更新日期: 2023-09-27 17:51:23
[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
.谢谢。
您似乎将客户端变量与服务器端混合在一起。这里有一种方法可以实现:
[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
在传递给客户端函数之前被正确编码 - 我已经摆脱了
<script type="text/javascript">
标签,因为你已经传递了true作为RegisterClientScriptBlock
函数的最后一个参数,这意味着(我从文档中引用):指示是否添加脚本标签的布尔值。所以如果你把这个设置为true,方法已经为你添加了这些标签,你不应该再手动添加它们。 - 我在警报函数中使用了
JSON.stringify
方法。该方法内置到所有现代浏览器中,并允许将javascript变量定义转换为字符串,以便获得友好的显示。当然,如果您愿意,也可以直接使用该变量:alert({0}[1].SomeProperty);
将显示集合中第二个元素的某些属性。
备注:为了调试的目的,最好使用console.log
和javascript调试工具,如FireBug,而不是用一些模态窗口发出警报。
你可以做的是:
- 通过JavaScript调用web方法
- 在web方法返回或完成时调用alert或其他方法。
有关更多参考,请访问:在ASP中以编程方式实现客户端回调而不回发。. NET Web Pages
你想做的事情不会像现在这样起作用。问题是,当您执行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
对象转换为某种人类可读的形式。您将注意到,我刚刚使用每个XmlTag
的ToString
方法完成了此操作-如果ToString
不完全正确,您可能需要使用不同的方法。
为什么不设置一个断点并附加到w3wp进程并进行调试,然后您可以看到变量的值?