如何在page_load VB.net之前加载客户端

时间:2012-06-14 13:32:17

标签: c# asp.net vb.net

我有一个问题(我正在学习VB)是否有一种方法在vb.net中使Me.LoadComplete加载到客户端之后,我开发这个简单的代码以便于理解我的问题

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
 Handles    Me.LoadComplete
    MsgBox(myhiddenField.Value)
End Sub

客户端

 </script>
<title></title>
<script type="text/javascript">
    $(document).ready(function() {
           $("#<%=myhiddenField.ClientID%>").val('this is the value ') ;
    });

</script>

<form id="form1" runat="server">
<div>
    <asp:LinkButton ID="myLink" runat="server"
      PostBackUrl="~/Default.aspx?value=1" >
      MyLink </asp:LinkButton>

    <asp:HiddenField ID="myhiddenField" runat="server"/>

</div>
</form>

当页面加载时,MsgBox将为空,但当您单击链接按钮时,MsgBox具有您在javascript中设置的值,因此我假设page_load函数首先被执行 问题是如何在page_load之前加载客户端内容?

3 个答案:

答案 0 :(得分:2)

你做不到。在将请求发送到客户端之前,必须完全完成所有服务器端代码,并且客户端代码的 none 可以在此之前运行。

如果你想让服务器端代码在客户端代码之后运行,那么你需要向客户端发送一个页面,让它运行一些javascript,然后将另一个请求发送回服务器,以便它可以运行更多服务器端代码。

如果你对你实际想要完成的事情更具体一点,而不是在尝试实际做到这一点的方式,那么我们可能会更有帮助。

答案 1 :(得分:1)

The ASP.NET Lifecycle说不,因为在Page_Render之后,内容不会被推送到浏览器,这是在Page_Load之后发生的。

您可以尝试在Page_Init中完成大量工作,并使用Response.Flush()强制服务器将内容发送到浏览器,但

  • 您只需推送已创建的内容,因此不允许您在Page_Load之前将整个页面推送到浏览器
  • 我不确定它会起作用
  • 即使这样做,也会产生副作用。例如,您可能需要管理控件创建,Viewstate值应用程序等。

即使有可能以任何方式,形状或形式(我怀疑) - 这将是一个有趣的实验,但我不建议设计这个想法的实时应用程序。页面生命周期是每个ASP.NET开发人员(或应该)熟悉的东西,并且做这样的愚蠢的事情只会让维护程序员更难。

答案 2 :(得分:1)

我想你可能会错误地提出你的问题。我赞成@DavidStratton,因为你必须先了解页面生命周期才能继续,但是当我读到你的问题时,看起来你在询问如何在发生PostBack之前用一个值填充隐藏字段。这实际上可以从客户端进行。既然你已经在使用jQuery了,我会在我的样本中保留它:

这是你的aspx的html版本:

<form id="form1" runat="server">
<div>
    <asp:LinkButton ID="myLink" runat="server"
        PostBackUrl="~/Default.aspx?value=1" >
            My Link</asp:LinkButton>

    <asp:HiddenField ID="myhiddenField" runat="server"/>
</div>
</form>

现在,这些控件是在第一个渲染上创建的,所以在渲染页面之前你不知道它会是什么。但是,您可以使用MyControl.ClientID属性访问脚本,从而在脚本中访问它。这是一个你至少已经触及的概念,因为它已经在你的代码中使用了,但我不确定你是否已经完成了它。由于您要使用LinkBut​​ton的click事件,因此您需要为其click事件分配一个javascript操作。

<script type="text/javascript">
    $(
        $("#<%=myLink.ClientID%>").click(
            function() {
                $("#<%=myhiddenField.ClientID%>").val('this is the value ');
            });
    );    
</script>

$(document).ready()方法是一种较旧的语法。较新的jQuery模块使用$(handler);上述脚本将在回发之前分配一个额外的步骤。额外的步骤应该设置隐藏字段的值,然后回发应该在它自己的过程中发生,隐藏字段的值应该在Page_Load期间可见。