2011-12-22 4 views
0

고객이 특정 요구 사항에서 면제를 요청할 수있는 웹 페이지를 개발 중입니다. 14 개의 체크 박스 목록이 있으며 각 체크 박스에는 두 개의 체크 박스가 있습니다. 확인 된 코드를 확인하는 코드는 제출 버튼에 배치됩니다. 이 방법은 코드 뒤에 있습니다. 여기에 대한 코드 (지금까지) 영문 페이지 I에서확인 확인란. 정적 방법으로 확인 됨

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

I 오류 얻을 "비 정적 필드, 메서드 또는 속성에 필요한 IW 객체 참조를 ..."

입니다 코드 숨김의 단추를 호출하는 단추와 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

우선, 0에서 int 1을 시작합니다. <=는 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; 
    } 
} 
루프에 대한 귀하의 변경 및 해제 i = 0를 시작하고 변경

< = 14-< 13의 C# 0 기반 장소 당신은 아마 당신의 응용 제품 내부의 비 정적 메서드를 호출하려고 ... 전체 메소드 서명 이온 중 하나를 메서드에 정적 단어를 추가하거나 제거하지만 오히려 당신이 만든 방법을 볼 것입니다 .. 또한 어디에서 WebMethod 클래스 개체의 인스턴스를 만드는거야?