2010-11-17 82 views
2

我试图触发一个回传,如果某些条件为真。最初,用户将点击我的表单上的一个按钮,服务器完成一些工作,并且在完成这项工作的过程中,它将隐藏字段赋值为'1'。当页面在第一次回发后重新加载时,我试图使用javascript来检查隐藏字段,如果它是'1',我需要页面再次回发,以便服务器端可以做一些额外的处理。这样做的原因是,我可以从后面的C#代码创建表单控件,并通过1次用户交互下载文件。以下是我迄今为止:从Javascript触发回发失败

<script type="text/javascript" language="JavaScript"> 
     function atload() { 
      var HWInfo = document.getElementById('HiddenHW').value; 
      if (HWInfo == '1') { 
       alert("flag has been set"); 

       __doPostBack('<%= hdnHidden.UniqueID %>', ''); 
      } 

     } 
     $(document).ready(atload); 

    </script> 

写着标志已设置警戒正确触发,但__doPostBack没有。在我的ASPX文件,这里是有关部分:

<form id="InventoryForm" runat="server"> 

<div> 
    <asp:Label ID="lblClientList" runat="server" Text="Client List"></asp:Label> 
    <asp:DropDownList ID="comboClientList" runat="server"></asp:DropDownList> 
    <asp:Label ID="spacer1" runat="server" Text="  "></asp:Label> 
    <asp:Button ID="btnGenerateHWReport" runat="server" Text="Generate Hardware Inventory Report" /> 
    <asp:Label ID="spacer2" runat="server" Text="  "></asp:Label> 
    <asp:Button ID="btnGenerateSWReport" runat="server" Text="Generate Software Inventory Report" /> 
    <br /> 
    <br /> 

    <asp:Panel ID="MissingCompPanel" runat="server"></asp:Panel> 
    <asp:HiddenField ID="HiddenHW" runat="server" Value="0" /> 
    <asp:HiddenField ID="hdnHidden" runat="server" /> 

</div> 
</form> 

我可以告诉回发永远不会触发,因为我在这永远不会绊倒在Page_Load C#代码隐藏的断点。我对这个几乎每一行都有破发点:

 if (!Page.IsPostBack) 
     { 
      // Page is not a postback, this is the first visit here 
      string foo = HiddenHW.Value; 
     } 
     else 
     { 
      // Page is a postback and not initial load 
      string foo = HiddenHW.Value; 
     } 

为什么我__doPostBak后没有发射警报,有没有更好的方式来做到这一点?我想要的最终结果是如果我的隐藏字段是'1',那么我希望我的第二次到服务器的行程实际发生,并且2)知道隐藏字段是'1'而不是其默认'0'。

谢谢!

回答

4

如何通过编程方式单击提交按钮并让它调用__doPostBack通常的方式呢?

+0

我最终创建了一个隐形虚拟按钮,称为onclick事件,并且它工作。 – 2010-11-21 01:16:55

0

尝试调用__doPostBack方法在页面上,而不是隐藏控制

__doPostBack('__Page', ''); 
+0

没有骰子,当我尝试一个。我也删除了警报,以防万一。我在第一次服务器旅行期间创建控件并将它们添加到窗体的事实是否存在? – 2010-11-17 16:26:45

+0

做一点实验,使用FireFox + Firebug并检查当你调用javascript时,如果控制台出现任何错误,并且Net标签记录任何请求回到服务器 – ericphan 2010-11-19 05:33:02

0

的当你的​​3210的价值,你不使用正确的ID。如果您查看呈现的源代码,则控件的ID与ctl00_HiddenHW类似。要获得该ID,您应该使用HiddenHW.ClientID。我相信__doPostBack也需要ClientID,而不是UniqueID。

function atload() { 
    var HWInfo = document.getElementById('<%= HiddenHW.ClientID %>').value; 
    if (HWInfo == '1') { 
     alert("flag has been set"); 

     __doPostBack('<%= hdnHidden.ClientID %>', ''); 
    } 
}