web-dev-qa-db-ja.com

__doPostBack()の使い方

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

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

146
Michael Kerute

あなたのWebフォームでbtnSaveというボタンを使ってこれを試すことができます。

<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
}

試してみて、それがあなたのためにうまくいったかどうか私たちに知らせてください。

141
Mr. Mr.

これは、サーバー側のコントロールを内部にポストバックさせるための良い方法でもあります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);
23
user2775317

これが__doPostBack()のしくみについての 簡単なチュートリアル です。

正直に言うと、私はあまり使いません。少なくとも直接。多くのサーバーコントロール(例:ButtonLinkButtonImageButtonGridViewの一部など)は、ポストバックメカニズムとして__doPostBackを使用します。

13
kbrimington

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

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

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

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

これは将来他の誰かを助けるかもしれないので、これを投稿してください。

7
TheUknown

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

例を挙げましょう。

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

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

protected void btn_Click(object sender, EventArgs e)

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

2

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

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

サーバー上では、送信されたフォームの値は、ページ内のフィールドのname属性によって識別されます。

UniqueIDが機能する理由は、UniqueIDおよびnameが実際にはサーバーコントロールが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
jBelanger

これは私がそれをする方法です

    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);               
    }