1

質問があります (私は 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 ?

4

3 に答える 3

2

ASP.NET ライフサイクルは、Page_Load の後に発生する Page_Render までコンテンツがブラウザーにプッシュされないため、いいえと言います。

Page_Init で一連の作業を試し、Response.Flush()を使用してサーバーに強制的にコンテンツをブラウザに送信させることもできますが、

  • 既に作成されたコンテンツのみをプッシュするため、Page_Load の前にページ全体をブラウザーにプッシュすることはできません。
  • うまくいくかどうかわかりません
  • できたとしても、副作用はあります。たとえば、コントロールの作成、Viewstate 値の適用などを管理する必要があるでしょう。

たとえそれがどのような方法、形状、または形式で可能であっても (私には疑問です) - 興味深い実験になるでしょうが、このアイデアに基づいてライブ アプリを設計することはお勧めしません。ページ ライフサイクルは、すべての ASP.NET 開発者がよく知っている (または知っておくべき) ものであり、そのようなばかげたことを行うと、メンテナンス プログラマーにとってそれが難しくなります。

于 2012-06-14T13:38:43.880 に答える
2

できません。 要求がクライアントに送信される前に、すべてのサーバー側コードが完全に終了している必要があり、それまでクライアント側コードは実行できません。

クライアント側のコードの後に​​サーバー側のコードを実行したい場合は、ページをクライアントに送信し、JavaScript を実行させてから、サーバー側のコードをさらに実行できるように別の要求をサーバーに送信する必要があります。 .

実際に達成しようとしている手段ではなく、実際に達成しようとしていることについてもう少し具体的に説明していただければ、おそらくもっと役立つでしょう。

于 2012-06-14T13:36:42.493 に答える
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 のクリック イベントを使用するため、そのクリック イベントに JavaScript アクションを割り当てる必要があります。

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

メソッドは$(document).ready()古い構文です。新しい jQuery モジュールの使用$(handler);上記のスクリプトは、ポストバックの前に追加のステップを割り当てます。その余分なステップで非表示フィールドの値を設定する必要があり、その後、ポストバックが独自のコースで発生し、非表示フィールドの値が Page_Load 中に表示されるようにする必要があります。

于 2012-06-14T13:51:54.903 に答える