__doPostBack()の使用方法


161

を使用してASP.NETで非同期ポストバックを作成しようとしています__doPostBack()が、その方法がわかりません。バニラJavaScriptを使用したいと思います。

ボタンのクリックのような単純なもので__doPostBack()イベントが発生する可能性があります。私はメカニズムがどのように機能するかを学ぼうとしているだけです。



9
まず、__ doPostBackは、UpdatePanel内のコントロールによってトリガーされない限り、非同期アクションを引き起こしません。
Ladislav Mrnka、2010

なぜこのタグ付けされたC#のJavascriptをJavaScriptの部分は理解していますが、C#の部分は理解していません。
ソロモンウッコ2016年

1
@Solomon Ucko-__doPostBack()によってページがサーバー側の実装にPOSTされるため、C#(VB.NETの可能性があります)
sh1rts

1
通常は機能しますが、手動での挿入__doPostBackは実際にはサポートされていません。ページにポストバックをトリガーするものが何もない場合、asp.netは__doPostBack関数の定義を省略します。サポートされているアプローチはを呼び出すことですClientScriptManager.GetPostBackEventReference。これは、フォームに文字列を返し、__doPostBack(...)それ__doPostBackが定義されていることを確認します。
ブライアン

回答:


156

たとえば、btnSaveというボタンを使用してWebフォームでこれを試すことができます。

<input type="button" id="btnSave" onclick="javascript:SaveWithParameter('Hello Michael')" value="click me"/>

<script type="text/javascript">
function SaveWithParameter(parameter)
{
  __doPostBack('btnSave', parameter)
}
</script>

そして、コードビハインドで次のようなコードを追加して値を読み取り、操作します。

public void Page_Load(object sender, EventArgs e)
{
  string parameter = Request["__EVENTARGUMENT"]; // parameter
  // Request["__EVENTTARGET"]; // btnSave
}

試してみて、うまくいったかどうかをお知らせください。


1
簡単な質問ですが、__ EVENTARGUMENTはパラメータまたはbtnSaveになりますか?
harsimranb 2012

3
パラメータです。__EVENTTARGETはボタンを提供します。
Mr. Mr.

__doPostBackを実行する2つ以上のボタンがある場合、page_load()でサーバー側のボタンをどのように区別しますか?
ハリドカーン2014

1
複数のパラメーターがある場合はどうなりますか?
Wilson

1
別として@Wilsonは、あなたのC#でオブジェクトにマップすることができJSONデータである可能性があり、あなたの引数は、あなたがしてなどオブジェクトへdeserialise /連載にJson.netを使用すると考えていた
氏氏

25

これは、サーバー側のコントロールがFancyBoxやjQuery Dialog内でポストバックするための良い方法でもあります。たとえば、FancyBox-divの場合:

   <asp:Button OnClientClick="testMe('param1');" ClientIDMode="Static"  ID="MyButton"  runat="server" Text="Ok" >
</asp:Button>

JavaScript:

function testMe(params) {
    var btnID= '<%=MyButton.ClientID %>';          
    __doPostBack(btnID, params);
}

サーバー側Page_Load:

 string parameter = Request["__EVENTARGUMENT"];
 if (parameter == "param1")
     MyButton_Click(sender, e);

4
ClientIDではなくUniqueIDを使用する必要があります。
Garr Godfrey

または、のClientIDMode="Static"属性を設定して、MyButtonASPがボタンのIDを変更しないようにします。
David R Tribble 2017年

14

これがどのように機能するかについての簡単なチュートリアル__doPostBack()です。

正直なところ、あまり使用しません。少なくとも直接。多くのサーバーコントロール、(例えば、ButtonLinkButtonImageButton、の部分GridViewなど、)を使用__doPostBack彼らのポストバックメカニズムとして。


6年後に早送りします。まだこれを使っているとショックになります。Web開発へのアプローチは、通常、このようなものが使用される考え方から遠ざかっています。
Phil

@Phil-ははは、これが実装されたバグを見ながら昨日このスレッドを読んでいました:)この日と時代にはかなり古風に見えます
Terry Delahunt

12
6年間早送りされました...そしてASP.NET Webフォームはまだこれを行います。したがって、受け入れられた回答の圧倒的な賛成。
kbrimington 2016

@kbrimington:ASP.NETが「まだこれを実行しない」とは言わなかった。大きく変わるとは思いません。私が言ったことは、新しい開発にASP.NET WebFormを使用する人が少なく、他の人がそれから移行するということです。
Phil

10

のこの投稿に何かを追加したいだけですasp:button。私はclientIdを試しましたが、うまくいきません:

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

ただし、UniqueIdを取得すると、次のようにサーバーにポストバックされるようです。

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

これは将来誰かを助けるかもしれないので、これを投稿します。


1
うんClientID、使っていたので苦労しましたClientIDMode = Static。使用してUniqueID働いた。
Phiter

私はこれを機能させるようにしてきましたが、ClientIDもUniqueIdも機能しません。
atamata

ああ、神様!この問題を解決しようとする数日。UniqueIDは問題を解決しました。ありがとう、相棒!
Faiz Infy

2

古い質問ですが、何かを追加したいと思いdoPostBack()ます。呼び出すときに、アクションにサーバーハンドラーメソッドを使用できます。

例として:

__doPostBack('<%= btn.UniqueID%>', 'my args');

サーバー上で起動します:

protected void btn_Click(object sender, EventArgs e)

引数を取得するためのより良い方法が見つからなかったため、まだを使用していRequest["__EVENTARGUMENT"]ます。


0

他の人が言ったように、コントロールのUniqueIDを__doPostback()メソッドに提供する必要があります。

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

サーバーでは、送信されたフォームの値は名前で識別されます、ページのフィールドの属性ます。

UniqueIDが機能する理由は、UniqueID名前が、サーバーコントロールがHTMLでレンダリングされる場合、は実際には同じものだ。

UniqueIDとは何かについて説明した記事は次のとおりです。

UniqueIDプロパティは、入力フィールド(チェックボックス、ドロップダウンリスト、および非表示フィールド)のHTML "name"属性の値を提供するためにも使用されます。UniqueIDはポストバックでも大きな役割を果たします。ポストバックをサポートするサーバーコントロールのUniqueIDプロパティは、__ EVENTTARGET非表示フィールドのデータを提供します。次に、ASP.NETランタイムは__EVENTTARGETフィールドを使用して、ポストバックをトリガーしたコントロールを見つけ、そのRaisePostBackEventメソッドを呼び出します。

src:https : //www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid


0

これが私のやり方です

    public void B_ODOC_OnClick(Object sender, EventArgs e)
    {
        string script="<script>__doPostBack(\'fileView$ctl01$OTHDOC\',\'{\"EventArgument\":\"OpenModal\",\"EncryptedData\":null}\');</script>";
        Page.ClientScript.RegisterStartupScript(this.GetType(),"JsOtherDocuments",script);               
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.