Есть ли способ отбросить статическое объявление из метода страницы? - PullRequest
2 голосов
/ 23 декабря 2011

Для сайта, который я разрабатываю, у меня есть две кнопки html, а не ASP, потому что я не хочу, чтобы они публиковались.Для кнопки отправки я вызываю функцию javascript, которая реализует PageMethods для вызова метода C # из codebehind.Вот код для кнопок и javascript.

<fieldset id="Fieldset">
    <button onclick="SendForm();">Send</button>             
    &nbsp;
    <button onclick="CancelForm();">Cancel</button>                  
</fieldset>

<asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" EnablePartialRendering="true" runat="server" />

<script type="text/javascript">
    function SendForm() {
        var email = $get("txtEmail").value;

        PageMethods.SendForm(email, OnSucceeded, OnFailed);
    }

    function OnSucceeded() {
        $get("Fieldset").innerHTML = "<p>Thank you!</p>";
    }

    function OnFailed(error) {
        alert(error.get_message());
    }
</script>

Метод codebehind, показанный здесь:

[WebMethod]
public static void SendForm(string email)
{
    if (string.IsNullOrEmpty(email))
    {
        throw new Exception("You must supply an email address.");
    }
    else
    {
        if (IsValidEmailAddress(email))
        {
            bool[] desc = new bool[14];
            bool[] local = new bool[14];
            bool[] other = new bool[14];

            for (int i = 1; i <= 14; i++)
            {
                desc[i] = ((CheckBox)Page.FindControl("chkDesc" + i.ToString())).Checked;
                local[i] = ((CheckBox)Page.FindControl("chkLocal" + i.ToString())).Checked;
                other[i] = ((CheckBox)Page.FindControl("chkOther" + i.ToString())).Checked;

                /* Do stuff here */
            }
        }
        else
        {
            throw new Exception("You must supply a valid email address.");
        }
    }
}

не работает, если он не объявлен как статический.Объявление его как статического не позволяет мне установить флажки на странице, поскольку оно генерирует ошибку «Ссылка на объект требуется для нестатического поля, метода или свойства».Так что моя проблема может быть решена с любого из двух направлений.А) Есть ли способ заставить этот метод работать без объявления его статическим?Б) Как установить флажки, если метод является статическим.

Ответы [ 3 ]

3 голосов
/ 23 декабря 2011

Это должно быть статичным, никак не обойтись; Но вы можете получить доступ к странице, как это

Page page = HttpContext.Current.Handler as Page;

и выполните FindControl на этом экземпляре страницы.

desc[i] = ((CheckBox)page.FindControl("chkDesc" + i.ToString())).Checked;
1 голос
/ 23 декабря 2011

Методы страницы являются частным случаем устаревшей технологии веб-службы ASMX. Они позволяют помещать службу в класс codebehind для страницы и не требуют отдельного проекта для службы.

Но они никогда не смогут получить доступ к чему-либо на самой странице. Это необходимо сделать со стороны клиента и передать значения флажков службе.

0 голосов
/ 23 декабря 2011

Если вам необходимо установить флажки, то вам нужно либо использовать UpdatePanel для выполнения ваших AJAX, либо вернуть что-то из метода вашей страницы (в идеале строку) и установить флажки на основе того, что возвращается в javascript на клиенте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...