1

我在我的 aspx 页面中写了一个 page Page 方法。在 Web 服务方法中,我需要调用 FindControl 方法返回文本框并获取文本框值。但我的 findControl 将使用 MasterPage 对象进行迭代。

请看我的代码

<script type = "text/javascript">
    function ShowCurrentDateTime() {
        $.ajax({
            type: "POST",
            url: "HRDefault.aspx/GetDate",
            data: '',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccess,
            failure: function(response) {
                alert(response.d);
            }
        });
    }

    function OnSuccess(response) {  }
</script>

<System.Web.Services.WebMethod()> _
Public Shared Function GetDate() As String
    Dim txt22_2 As TextBox = CType(RenderControls.FindControlRecursive
(Page.Master, "txt22_2"), TextBox)
        Dim str As String
        str = txt22_2.Text
    Return String.Empty
End Function

但是我在使用时遇到编译器错误Page.Master

对非共享成员的引用需要对象引用

如何传递母版页对象或页面到页面方法?。所以我可以在 Sared 方法中使用。

有什么方法可以直接在 Page 方法中访问 Textbox 值?我需要访问页面方法中的几个控件。

4

3 回答 3

1

HttpContext.Current.Handler可能会为您提供对页面对象的引用,但它不会有用,因为页面生命周期不在 PageMethods 中执行(因此没有视图状态或请求数据)。你有几个选择:

  1. 从 java 脚本中选择控制值。如果需要,在进行服务调用时使用数据参数将它们传递给 PageMethod。
  2. 使用 Session( HttpContext.Current.Session) 或缓存将数据存储在页面上,然后在 PageMethod 中检索。我更喜欢使用带有新 guid 的缓存作为键,然后将 guid 传递给 PageMethod。
于 2010-10-05T05:32:36.090 回答
1

不知道$.ajax,但这对我来说很好:

<asp:ScriptManager runat="server" EnablePageMethods="true" />
<!-- ...................... -->
<script type="text/javascript">
    function ShowCurrentDateTime() {
        x = document.getElementById('<%= TextBox1.ClientID %>').value;
        PageMethods.GetDate(x, OnSuccess, OnFailure);
    }
    function OnSuccess(response) {
        alert(response);
    }
    function OnFailure(response) {
        alert(response._message);
    }
</script>

在后面的代码中:

<System.Web.Services.WebMethod()> _
Public Shared Function GetDate(x as String) As String
    ' do something with x
    ' u can add more params if you need
    Return String.Empty
End Function

希望语法没问题,我不太记得 vb :P

于 2010-10-05T06:01:26.987 回答
0

由于您已经在发布数据,您应该能够获得对 Request.Form 集合的引用,您可以使用它来读取发布的文本框值

于 2010-10-05T07:59:33.487 回答