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 .谢谢。

alert in WebMethod

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

[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,而不是用一些模态窗口发出警报。

你可以做的是:

  1. 通过JavaScript调用web方法
  2. 在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对象转换为某种人类可读的形式。您将注意到,我刚刚使用每个XmlTagToString方法完成了此操作-如果ToString不完全正确,您可能需要使用不同的方法。

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