2011-12-22 99 views
0

我正在为客户端开发一个网页,要求免除某些要求。有一个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."); 
     } 
    } 
} 

我得到错误“的对象引用IW的非静态字段,方法或属性嘀......”

在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

整个页面没有用web方法发回。 – 2011-12-22 18:40:06

+0

对于初学者来说,让你的int 1从0开始摆脱<=你是否是一个VB程序员转换到C#如果记住C#for循环和数组访问和类似的东西都是从零开始的。 – MethodMan 2011-12-22 18:42:37

+0

事实上,这会更好地放在后面的代码并将数组作为参数传递 – Chad 2011-12-22 18:52:54

回答

1

按我的知识,你不能指页面的控制在静态方法,直到,除非你明确地传递给你的Web方法“页面”对象的引用书面。

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

更改您的for循环和启动I = 0,改变< = 14 < 13 C#是0基于 将整个方法签名..你可能想打电话给你的APPLICAT内部的非静态方法离子或者添加单词静态的方法或删除,但我宁愿看看你是如何创建的方法..还有你在哪里创建的WebMethod类对象的实例..?