2011-12-22 16 views
0

クライアントが特定の要件の免除をリクエストするためのWebページを開発しています。 14個のチェックボックスのリストがあり、それぞれに2つのチェックボックスがあります。チェックされたコードを確認するコードは、送信ボタンに配置されます。このメソッドはコードの背後にあります。ここではそのためのコードは、私はエラーを取得(今のところ)ベリファイチェックボックス。静的メソッドからチェック

[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ページでは、私はボタンとコードビハインドのボタンを呼び出すjavascript/ajaxを持っています。ここに示されている:あなたは明示的にあなたが持っているウェブメソッドへの「ページ」オブジェクトの参照を渡すまでとしない限り、私の知識を1として

<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

初心者のためには、0から始まるint 1を開始してください。<=はVBプログラマで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のC#で0ベース 場所あなたはおそらく、あなたのアプリケーションシートの内側に非静的メソッドを呼び出すようにしようとしている..全体のメソッドシグネチャイオンは、メソッドに静的な単語を追加するか削除しますが、私はむしろメソッドがどのように作成されているかを見たいと思います.WebMethodクラスオブジェクトのインスタンスをどこに作成していますか?

関連する問題