Как передать объект страницы или мастер-страницы в метод страницы AJAX - PullRequest
1 голос
/ 05 октября 2010

Я написал метод Page page на моей странице 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 ?.Поэтому я могу использовать метод Sared.

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

Ответы [ 3 ]

1 голос
/ 05 октября 2010

не знаю о $.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

1 голос
/ 05 октября 2010

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

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

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

...