web-dev-qa-db-ja.com

asp.netで__doPostBack関数を使用する方法

__doPostBack関数を使用しようとしているので、ページの読み込み時にページにポストパックを強制できますが、理解するのに問題があります。

オンラインで例を見ていました。ボタンをクリックすると、ポストバックを実行したいのですが、コードビハインドのコードを完成させる方法がわかりません。

これが私がこれまでに持っているものです:

<script type="text/javascript">
        function DoPostBack() {
            __doPostBack('btnNew', 'MyArgument');
        }
    </script>

これが私のボタンです

 <asp:Button ID="btnNew" runat="server" CausesValidation="False" CommandName="New" OnClick="DoPostBack()" Text="Create" />

コードビハインドで「MyArgument」を使用することを理解していないようです。ページの読み込み時にポストバックするように、コードビハインドで何をする必要がありますか?よろしくお願いします。

5
moe

シナリオ1

JavaScriptを使用する場合関数を使用してポストバックをトリガーする場合は、OnClickOnClientClickに置き換える必要があります。ボタンの定義を次のように変更します(ボタンはUpdatePanel内にネストされていると既に想定しています)。

<asp:Button ID="btnNew" 
    runat="server" 
    CausesValidation="False" 
    CommandName="New" 
    OnClientClick="DoPostBack();" 
    Text="Create" />

背後のコードで、Page_Loadメソッドで、Request["__EVENTTARGET"]Request["__EVENTARGUMENT"]を読み取ります。

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        if (Request["__EVENTTARGET"] == "btnNew" && 
            Request["__EVENTARGUMENT"] == "MyArgument")
        {
            //do something
        }
    }
}

シナリオ2

必ずしもJavaScriptを使用する必要がない場合、ボタンの定義を次のように変更します。

<asp:Button ID="btnNew"
    runat="server"
    CausesValidation="False"
    CommandName="New"
    OnClick="DoPostback"
    CommandArgument="MyArgument"
    Text="Create" />

次に、コードビハインドに次のメソッドを追加します。

protected void DoPostback(object sender, EventArgs e)
{
    var target = ((Button)(sender)).ClientID; //"btnNew"
    var argument = ((Button)(sender)).CommandArgument; //"MyArgument"
    if (target == "btnNew" &&
        argument == "MyArgument")
    {
        //do something
    }
}
4
Alex Filipovici

関数__doPostBackに引数として渡される値は、__EVENTTARGETおよび__EVENTARGUMENTという名前の要求パラメーターとしてサーバーに送信されます。 ASP.NETはこれらの値を使用して、イベントを発生させたコントロールと、EventArgsオブジェクトとして渡す必要のある引数を決定します。ただし、オブジェクトHttpRequestを使用して直接アクセスできます。

string eventTarget = this.Request.Params.Get("__EVENTTARGET");
string eventArgument = this.Request.Params.Get("__EVENTARGUMENT");
2
Andrei

ASP.Netは、javascriptからPostBackを実行するための呼び出しを作成する方法を提供します。

ClientScriptManager.GetPostBackEventReferenceメソッドは、特定のコントロールからポストバックを実行するためにJavaScriptで使用する必要のあるコードをビルドします http://msdn.Microsoft.com/en-us/library/system.web.ui.clientscriptmanager .getpostbackeventreference.aspx

以下は例です(VB.Net)。コードビハインドでは、独自のjavascript関数を作成しています。 ASP.Netコードは、関数にjavascriptコードを挿入して、「MyButton」コントロールのポストバックを実行します。ページが作成されると、このjavascript関数が使用可能になります。 javascriptコードがこのjavascript関数を呼び出すと、PostBackが実行されます。これは、[MyButton]ボタンがクリックされたときに発生するアクションを模倣します。

Dim csm As ClientScriptManager = Page.ClientScript
Dim sb As New StringBuilder
sb.AppendLine("function handleDoPostBack() {")
sb.AppendLine(csm.GetPostBackEventReference(MyButton, ""))
sb.AppendLine("}")
csm.RegisterClientScriptBlock(Me.Page.GetType, "js_code__create_functions", sb.ToString, True)

それがあなたが探しているものであることを願っています。

[〜#〜]更新[〜#〜]

これは、サーバー側で作成されたjavascript関数を呼び出す方法の例です。

<input type="button" value="Click Me" onclick="handleDoPostBack();" />

PostBackボタンの概念を混乱させたくなかったので、(ASP.Netボタンを使用する代わりに)通常のHTMLボタンを作成しました。これは単にHTMLボタンであり、プログラムで実行する以外のことは何もしません。 onclickにjavascript関数呼び出しを追加したので、ボタンを押すと、ポストバックが実行されます。このポストバックが発生すると、「MyButton」ボタンがクリックされたかのように動作します。これは、ページのどこかにあるASP.Netボタンになります。そのボタンはASP.Netボタンであるため、すでにPostBackを単独で実行していることになります。そのため、プログラムでPostBackをトリガーしようとしている理由について混乱が生じていると思います。

Javascript関数をコードで直接呼び出すこともできます...

<script>
handleDoPostBack();
</script>

これは、コードが検出するとすぐに発生します。または、onloadイベントに入れると、ページの読み込みが終了したときに呼び出されます。しかし、私のコメントで述べたように、無限のループになってしまう可能性があるため、注意する必要があります。

他の回答のコメントのいくつかを読んだことから、あなたが解決しようとしている問題は、あなたが使用しているAJAXパネルに関係しているようです。私はそれらに精通していません、そのため、なぜそれが機能しないのかわかりません。また、PostBackをプログラムでトリガーすることで問題が解決するかどうかもわかりません。

ただし、プログラムでPostBackをトリガーする必要がある場合は、これが使用できるコードです。ページにボタンを表示したくないが、アクションを実行したい場合に使用します。私のページで何か他のことが起こったとき、ボタンがクリックされたかのように動作するJavaScriptコードを実行します。サーバー側でそのボタンのクリックを処理できます。 ASP.Netページにボタンを含めますが、CSSを使用してユーザーにボタンが表示されないようにします。そのため、ユーザーにはボタンは表示されませんが、私のjavascriptコードは、そのボタンのクリックを模倣するjavacript関数を呼び出すことができます。

1
Rick

以下のコードは、C#を使用してポストバックを実行するために機能します。 'MyArgument'パラメータを使用しておらず、空のままにしていることに注意してください

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack('dummybtnPivotGridupdate', '')", true);

どこ

<asp:Button ID="dummybtnPivotGridupdate" runat="server" Style="display: none;" ClientIDMode="Static" />

お役に立てれば!

1
Ram