Как передать объект страницы или мастер-страницы методу страницы AJAX

Я написал метод страницы страницы на моей странице aspx. в методе веб-службы мне нужно вызвать метод 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:

Ссылка на неразделяемый член требует ссылки на объект

Как передать объект Master Page или метод Page to Page?. Так что я могу использовать метод Сареда.

Есть ли способ получить доступ к значению Textbox непосредственно в методе страницы? Мне нужен доступ к паре элементов управления в Page Method.


person James123    schedule 05.10.2010    source источник


Ответы (3)


не знаю насчет $.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

person y34h    schedule 05.10.2010

HttpContext.Current.Handler может дать вам ссылку на объект страницы, но это будет бесполезно, потому что жизненный цикл страницы не выполняется в PageMethods (поэтому нет данных о состоянии просмотра или запросе). У вас есть несколько альтернатив:

  1. Выберите контрольные значения из java-скрипта. При необходимости передайте их в PageMethod с помощью параметра данных при вызове службы.
  2. Используйте сеанс (HttpContext.Current.Session) или кеш для хранения данных на странице, а затем извлекайте их в PageMethod. Я предпочитаю использовать кеш с новым guid в качестве ключа, а затем передавать guid в PageMethod.
person VinayC    schedule 05.10.2010

Поскольку вы уже публикуете данные, вы должны иметь возможность получить ссылку на коллекцию Request.Form, которую вы можете использовать для чтения опубликованных значений текстового поля.

person Rajesh Batheja    schedule 05.10.2010