2011-12-22 65 views
2

对于我正在开发的网站,我有两个html按钮,而不是ASP,因为我不想让他们回发。对于提交按钮,我调用了一个JavaScript函数,该函数实现了PageMethods从代码隐藏中调用C#方法。这里是按钮和JavaScript的代码。这里显示有没有办法从页面方法中删除静态声明?

<fieldset id="Fieldset"> 
    <button onclick="SendForm();">Send</button>    
    &nbsp; 
    <button onclick="CancelForm();">Cancel</button>     
</fieldset> 

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

代码隐藏方法:

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

不起作用,除非它被声明为静态的。将其声明为静态块会阻止我检查页面上的复选框,因为它会生成“非静态字段,方法或属性需要对象引用”错误。所以我的问题可以从两个方向中的任何一个来解决。 A)有没有办法让这个方法可以工作,而不需要声明它是静态的? B)如果方法是静态的,我如何检查复选框。

回答

3

它必须是静态的,没有办法绕过;但你可以这样访问页面

Page page = HttpContext.Current.Handler as Page; 

并且在这个页面实例上做FindControl。

desc[i] = ((CheckBox)page.FindControl("chkDesc" + i.ToString())).Checked; 
+0

这样做的伎俩,谢谢! – 2011-12-22 20:42:05

0

如果您需要检查的复选框,然后你需要或者使用一个UpdatePanel做你的AJAX的东西,或者从你的页面的方法(理想的是字符串)返回的东西,并检查基于什么在返回的复选框客户端上的JavaScript。

1

页面方法是传统ASMX Web服务技术的特例。它们允许您将该服务放置在该页面的代码隐藏类中,并使您不需要该服务的单独项目。

但他们永远不能访问页面上的任何东西。您必须从客户端执行此操作,并将复选框的值传递给服务。

相关问题