PageMethods and UpdatePanel

6
我有一个以下的页面层级结构:

enter image description here

如果我点击“保存”按钮,我想要执行一个PageMethod,因此我编写了以下代码:

在按钮单击事件中我调用了

OnClientClick="return btnSaveAS_Clicked()"

在内部用户控件的PageLoad中调用以下内容
private void RegisterJavaScript()
{
    StringBuilder jScript = new StringBuilder();
    jScript.Append("<script type='text/javascript'>");
    jScript.Append(@"function btnSaveAS_Clicked() {
        var txtConditionName = document.getElementById('" + txtConditionName.ClientID + @"').value;
        PageMethods.Combine('hello','world', OnSuccess);
        function onSuccess(result)
        {
            alert(result);
        }
    }");
    jScript.Append("</script>");

    Page.ClientScript.RegisterStartupScript(this.GetType(), "conditions_key", jScript.ToString());
}

编码页方法

[WebMethod]
public static string Combine(string s1, string s2) {
  return s1 + "," + s2;
}

但是它会出现以下错误...
![enter image description here](https://istack.dev59.com/yKqwp.webp)

那么 UpdatePanel 在这里起什么作用? - jcolebrand
@jcolebrand:更新面板在“页面”中。在“页面”中,我有一个下拉列表,根据选择加载用户控件。 - Rauf
Page方法在哪里?是在Page还是UserControl中? - Sreekumar P
1个回答

4

您不能在ascx页面中定义页面方法。您必须在Web表单中定义它们。如果您想要在用户控件中定义页面方法,则需要在您的aspx页面中定义一个转发页面方法,如下所示(source):

在用户控件中:

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string MyUserControlPageMethod()
{
    return "Hello from MyUserControlPageMethod";
}  

在aspx.cs页面中:
[WebMethod]
[ScriptMethod]
public static string ForwardingToUserControlMethod()
{
    return WebUserControl.MyUserControlMethod();
}  

在aspx页面中:
 function CallUserControlPageMethod()
 {
     PageMethods.ForwardingToUserControlPageMethod(callbackFunction);           
 }  

另一种选择是使用 ASMX 服务和 jquery ajax 方法 (jQuery.ajax, jQuery.get, jQuery.post) 异步调用您的方法 (示例)。

另一个选择是定义 http 处理程序并通过 jQuery 调用它们 (教程)。


哦,糟糕,我完全忽略了那是在 .ascx 中定义的,干得好。或者,他可以使用 ASMX 来托管 WebMethod。 - jcolebrand
@Kamyar,如果我使用“转发页面方法”,会降低性能吗? - Rauf
@jcolebrand,如果我使用“转发页面方法”,会降低性能吗? - Rauf
@Kamyar 让我们在聊天室里继续这个讨论 - Rauf
你不能直接传递值,必须使用 <%= %> 标记从客户端传递值。 - Kamyar
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接