1

我正在开发一个 Web 应用程序,当在页面上按下树按钮时,我需要从后面的代码中触发 ac# 函数。我找到了一些为我找到节点的代码,但是,当尝试从 JS 调用它时,似乎无法识别 c# 函数。

<script type = "text/javascript">

function OnLoad() {
   var links = document.getElementById("<%=navTree.ClientID %>").getElementsByTagName("a");
   for (var i = 0; i < links.length; i++) {
     links[i].setAttribute("href", "javascript:NodeClick(\"" + links[i].id + "\", \"" + links[i].getAttribute("href") + "\")");
   }
}

window.onload = OnLoad;

function NodeClick(id, attribute) {
  //Do Something
  alert(nodeLink.innerHTML + " clicked" + PageMethods.node_Click());         
  eval(attribute);
}

</script>

这是我的 C# 代码:

[WebMethod]
public static string node_Click()
{
  return "@#$";
}

如果我从警报中删除 PageMethods.node_Click() 调用,那么它可以正常工作,但不能与调用一起使用。我在输入 PageMethods 时也注意到了。我的函数在句号之后没有出现在弹出列表中(在 VS 中)

有任何想法吗?

另外,这是我的cs文件:

public partial class SiteMaster : MasterPage
{
  protected void Page_Load(object sender, EventArgs e)
  {
  }

  [WebMethod]
  public static string node_Click()
  {
    return "@#$";
  }
}
4

1 回答 1

1

您不能像您尝试做的那样直接从 JavaScript 调用 ASP.NET AJAX 页面方法。您要么需要EnablePageMethods="true"在 ASP.NET AJAX 上ScriptManager,要么使用 jQuery 的.ajax()方法来调用它们。

EnablePageMethods创建一个允许PageMethods.YourPageMethodName()语法工作的 JavaScript 代理。

对于 jQuery,由于 ASP.NET AJAX 页面方法实际上只是托管在 ASP.NET 页面内的独立 Web 服务方法,因此它们可以由 AJAX 请求通过该.ajax()函数调用。

另外值得注意的是,ASP.NET AJAX 页面方法会自动对其返回值进行 JSON 编码(如果有);因此您不会在页面方法本身中看到任何 JavaScript 序列化。

阅读使用 jQuery 直接调用 ASP.NET AJAX 页面方法,了解如何使用这两种方法进行操作。

注意:我自己更喜欢 jQuery.ajax()路由,但过去使用过该PageMethods语法。我个人不喜欢我的页面中有一堆额外的 JavaScript(通过启用页面方法构建的代理ScriptManager)在我的页面中,我已经习惯了尽可能多地使用 jQuery。

于 2013-08-08T01:13:37.757 回答