2011-12-22 2 views
0

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

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

Я получаю ошибку «Ссылка объекта IW требуется для поля, метода или свойства нестатической ...»

В ASPX страницы I есть кнопка и 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

вся страница не отправлена ​​назад с помощью веб-метода. –

+0

Для начала сделайте, чтобы ваш int 1 начинался с 0, избавляясь от <= - вы, программист VB, переходите на C#, если так имейте в виду C# для циклов и доступа к массиву, и подобные вещи основаны на нуле. – MethodMan

+0

действительно, это лучше было бы поставить в код позади и передать массивы в качестве параметра – Chad

ответ

1

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

0

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

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

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