【问题标题】:How do I call a serverside function from javascript?如何从 javascript 调用服务器端函数?
【发布时间】:2010-11-03 23:40:48
【问题描述】:

我有一个 javascript 函数,我试图从该函数调用服务器端函数 WebSchedule.Client.RadGrid1_SelectedIndexChanged。这是代码:

<script type="text/javascript">

     function RowSelected(sender, args) 
     {
         var dataKeyValue = args.getDataKeyValue("Order_No");
         document.getElementById("txtOrderno").value = dataKeyValue;
         WebSchedule.Client.RadGrid1_SelectedIndexChanged(sender, args);
     }
 </script>

但是,我收到错误消息“WebSchedule 未定义”。我做错了什么?

【问题讨论】:

  • 你确定你是从一个aspx页面而不是一个ascx用户控件调用这个pagemethod?

标签: c# asp.net javascript .net-3.5


【解决方案1】:

查看所谓的page methods

顺便说一句,这应该是服务器端方法还是客户端方法?

function RowSelected(sender, args) { 
    var dataKeyValue = args.getDataKeyValue("Order_No");      
    document.getElementById("txtOrderno").value = dataKeyValue;
    WebSchedule.Client.RadGrid1_SelectedIndexChanged(sender, args); 
} 

所以 - 在我看来这是一个 javascript 函数。

据我了解,RadScriptManager 继承自 System.Web.UI.ScriptManager。这就是 EnablePageMethods 道具的作用: "获取或设置一个值,该值指示是否可以从客户端脚本调用 ASP.NET 页面中的 public static 页面方法。"

这些粗体字表示 - 由于缺少视图状态,您不会在该服务器端方法中看到任何控件。

因此 - 考虑使用更新面板控件(我不知道它如何与 Telerik 控件一起使用)或确保您的服务器端方法是完全无状态的(通过 javascript 函数传递所需的数据)。

无论如何 - 在我看来,您应该更深入地研究页面方法的性质。

【讨论】:

  • 我已经做到了,在 pagemethods 是真的,它仍然不起作用跨度>
  • 底线是服务器端方法
  • 感谢您帮助他人时的美好感觉。 :)
【解决方案2】:

您的服务器端页面方法必须具有 WebMethod 属性并声明为 public static。

然后使用 javascript 可以使用以下语法调用它们:PageMethods.MethodName()

【讨论】:

  • 这会失败,因为公共静态方法对 viewstate => gridview 一无所知。
  • 您对视图状态是正确的,但问题只是关于调用服务器端方法 - 与视图状态无关。显然服务器端事件不能直接用javascript调用。
  • 这似乎已经醒了,谢谢,但是我现在堆栈空间不足
  • 我需要启用视图状态吗?
  • 请小心更新面板。如果使用不当,它会严重影响性能。 :)
【解决方案3】:

客户端 =/= 服务器

研究异步 Javascript 和 XML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 2011-12-09
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    相关资源
    最近更新 更多