Проверьте флажок. Проверено статическим методом - PullRequest
0 голосов
/ 22 декабря 2011

Я разрабатываю веб-страницу для клиентов, чтобы запросить освобождение от определенных требований. Существует список из 14 флажков, каждый с двумя последующими флажками. Код для проверки того, какие из них проверены, будет помещен в кнопку отправки. Этот метод находится в коде позади. Вот код для этого (пока)

[WebMethod]
public 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.");
        }
    }
}

Я получаю сообщение об ошибке "Требуется ссылка на объект для нестатического поля, метода или свойства ..."

На странице aspx у меня есть кнопка и javascript / ajax, который вызывает кнопку в коде позади. Показано здесь:

<table width='750' align='center'>
    <tr>
        <td align='left'>
            <label>Please Provide your email address:</label>
            <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td align='left'>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td align='left'>
            <fieldset id="Fieldset">
                <button onclick="SendForm();">
                    Send</button>               
                &nbsp;
                <button onclick="CancelForm();">
                    Cancel</button>                  
            </fieldset>
        </td>
    </tr>
</table>
</form>

<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>

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Насколько мне известно, вы не можете ссылаться на элементы управления страницей в статическом методе до тех пор, пока вы явно не передадите ссылку на объект "Page" веб-методу, который вы написали.

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

Где у вас есть следующий код:

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 */
}

Почему у вас нет этого кода проверки в классе в вашем проекте ... есть ли причина, по которой вы пытаетесь получить доступ к PageControls с помощью этого кода

if (IsValidEmailAddress(email))         
{             
   for (int i = 1; i <= count; i++)
   { 
     CheckBox chkBox = chkDesc1.Checked;
   }
} 

Измените цикл for и начните i = 0 и измените <= 14 на <13 C # на основе 0 Поместите всю сигнатуру метода .. вы, вероятно, пытаетесь вызвать нестатический метод внутри вашего приложения, либо добавьте слово static к методу, либо удалите, но я бы предпочел посмотреть, как у вас создан метод ... также где вы создаете экземпляр объекта класса WebMethod ..? </p>

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