web-dev-qa-db-ja.com

__doPostBackが定義されていません

私のページのいずれかで__doPostBackを呼び出そうとすると、そのエラーが発生します。プロジェクト内のすべてのページは__doPostBack関数を使用しますが、この特定のページではJavascriptエラーが発生します。

私はインターネットで探していましたが、私が読んだ唯一のことは、閉じていないタグがあるときにこのエラーが発生したことですが、サイトとそのOKを確認します。

エラー:__doPostBackは定義されていませんソースファイル:htt:// localhost:99/ProjectName/Disable.aspx行:1

28
jmpena

__doPostBack()は、ポストバックを引き起こす可能性のあるASP.NET WebControlによって自動的に含まれる必要があります。書いたJavascriptで手動で呼び出しているように聞こえます。その場合、WebControlを含めて、その関数がページに挿入されていることを確認する必要があります。

10
James Curran

ランタイム/クライアント側のエラー__doPostBackが未定義であるため、数時間悩まされます。ネット上で誤解を招く/誤ったヘルプがたくさんありました。 Page_Loadファイルのdefault.aspx.csイベントに次のコード行を挿入すると、システムとGoDaddyの運用環境ですべて正常に機能しました。

ClientScript.GetPostBackEventReference(this, string.Empty);
36
Don Tato

ページにポストバックを引き起こすコントロールがない場合、__ doPostBack()は関数定義として出力されません。これをオーバーライドする1つの方法は、Page_PreRender()に次の行を含めることです。

this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty);

この関数は、__ doPostBack()を呼び出す文字列を返します。しかし、ページに__doPostBack()関数定義を強制的に出力させます。

21
SAGExSDX

これが私に起こった理由です:スクリプトタグには常に終了タグが必要だということを誤って忘れていました。

<script src="/Scripts/appLogic/Regions.js" />

スクリプトタグを修正しました。

<script src="/Scripts/appLogic/Regions.js" type="text/javascript" ></script>

そして正気が戻った。

16
Paul Keister

このコードを.aspxに追加するだけです

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
13
Jose Luis

__doPostBack Worksみんな

このコードをページ読み込みで記述します

ClientScript.GetPostBackEventReference(this、 "");

8
Raghubir Singh

RegisterRequiresPostBack メソッドを呼び出してみてください。 ASP.NETランタイムに__doPostBackコードを含める必要があります。

4
Atanas Korchev

基本的に何が起こっているのかというと、2つのhtml隠し要素「eventtarget」と「eventargument」が欠落しており、関数「__doPostBack」も欠落しています。

これらはDOMにありません。

このためにリストされたすべての修正を試しましたが、どれも機能しませんでした。ただし、jqueryとjavascriptの組み合わせを使用すると、控えめなソリューションがあります。これをドキュメントのjavascriptに追加すると、すぐにレースに参加できます(4.5をインストールできる場合は、サーバーに.net framework 4.5をインストールするよりもはるかに迅速な方法です)。

if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) {
  $('#YOUR_ASPNET_FORMID').prepend('<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />');
}

if (typeof __doPostBack == 'undefined') {
  __doPostBack = function (eventTarget, eventArgument) { object
    var theForm = document.forms['YOUR_ASPNET_FORMID'];
    if (!theForm) {
      theForm = document.YOUR_ASPNET_FORMID;
    }
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
      theForm.__EVENTTARGET.value = eventTarget;
      theForm.__EVENTARGUMENT.value = eventArgument;
      theForm.submit();
    }
  };
}

4.5をインストールすると、これが修正されると理解しています。私は絶対にお勧めします。ただし、.net 4で焼き付けられたcmsシステムを使用して企業向けのサイトで作業している場合は、プラットフォームの更新によって作成された新しいバグを導入するのではなく、これは簡単なソリューションかもしれません。

2
user3283145

独自のページコードを記述し、runat="server"フォーム要素。

2
rg89

私の問題の解決策:IIS ASP.NET Webformsは、ユーザーエージェント文字列に応じてWebページを生成します

My IISはIE11ブラウザーの定義がなかったため、JavaScriptをサポートしていない非常に単純なブラウザープロファイルにデフォルト設定されていました。

  • 短期的な解決策:ブラウザーを互換モードで実行します。
  • 中期ソリューション:IE11ブラウザープロファイル定義を含む.Net Framework 4.5.1の展開。

別の方法: IE11ブラウザ定義ファイルを設定

2
Martin Sentker

このスレッドがアクティブになってからしばらく経ちましたが、将来登場する人のためにもう少し情報を追加します。

ClientScriptManagerクラスには、JavaScriptポストバックの処理を改善するメソッドがいくつかあります。特に、 GetPostBackClientHyperlink ルーチンです。文字列を再調整し、要素のonclickクライアント側イベントに割り当てることができます。このメソッドを使用すると、__ doPostBackルーチンと必要な非表示フォームフィールドが自動的に生成され、JavaScriptを自分で記述する必要はありません。たとえば、Page_Loadにこれがあります。

lnkDeactivate.Attributes("onclick") = ClientScript.GetPostbackClientHyperlink(lnkDeactivate, "deactivate")

この場合、ClientScriptは、ページによって自動的に使用可能にされたClientScriptManagerオブジェクトインスタンスです...私はそれをインスタンス化しませんでした。ポストバックでは、このコードを使用してイベントを検出します。

If Not String.IsNullOrEmpty(Request("__EVENTARGUMENT")) AndAlso Request("__EVENTARGUMENT") = "deactivate") Then
  '-- do somthing
End If

これを接続するためのより良い/よりクリーンな方法があると確信していますが、その背後にあるアイデアが得られることを願っています。

1
Justin
 this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty); 

このトリックはうまくいきました。それでもレンダリングされなかった理由を知りたいと思っていました...

ありがとうございました!

1
Troy

私は今日この問題を抱えていましたが、残念ながらあなたのものも含めて、私が見つけた解決策はどれもうまくいきませんでした。だから誰かがこれを読んで、それが彼らのためにうまくいかないなら、これを試してください

http://you.arenot.me/2010/11/03/asp-net-__dopostback-is-not-defined/

しかし、何が間違っていたのかを解決するプロセスを通して私を助けてくれてありがとう!

0
Colin Wiseman

私はこのエラーがあり、挿入して解決しました:

<form runat="server" style="display: none"></form>
0
Keivan Sabil...

私にとって「__doPostBack」はすべてのページで機能しませんでした。Visualstdioの新しいバージョンでプロジェクトをコンパイルし、ソリューションエクスプローラーでプロパティをダブルクリックし、「ターゲットフレームワーク」を.Net framework 4.0から.Net framework 3.0以降に変更したためですプロジェクトを再構築し、それが働いた。

0
Alireza

古い質問ですが最近の回答:ScriptManagerがある場合は、EnablePartialRenderingが有効になっているかどうかを確認してください。もしそうなら、それを無効にします、なぜそこに問題があるのか​​分かりません...

0
gobes

これは、私のスクリプトが「破棄」されたIframe内にあったために取得されていました(Telerikの「ウィンドウ」が閉じられていたため)。 iframe内で_dopostback()を定義するコードはなくなりましたが、iframe内で_dopostback()を呼び出すコードはまだぶら下がっていました。 JavaScriptが大好き!

0
Josh Mouch
lnkDeactivate.Attributes("onclick") = ClientScript.GetPostbackClientHyperlink(lnkDeactivate, "deactivate")
0
Atul Pawar

runat="server"属性を持つform要素でサーバー側のコントロールをラップするとうまくいきました。 ASP環境によれば、runat="server"属性を持つform要素は1つだけである必要があります。そうでない場合、重大な問題が発生する可能性があります。

<form runat="server" id="form1">
   <!-- Server side controls go here -->
</form>
0
Jamshaid Kamran

このビンテージスレッドへの別の追加....

JQuery Mobileを使用してサイトを開発しているときにこれらの症状がありましたが、その原因は、影響を受けたページにたどったリンクがrel="external"属性が設定されています。

これは、JQueryが新しいページのコンテンツをAJAX経由でロードし、すべてを再ロードするのではなく、現在のページに「インジェクト」することを意味しました。したがって、必要なポストバックjavascriptは、ページ全体を更新するまで存在しませんでした。

0
Ted

私は、asp.netフォームに含まれるスクリプトでこのメソッドを使用しました。

main form id sample:
<script src="myscript" />

<form id="frmPost" runat="server">
</form>

// myscript.js in Java script function
mypostboack: function () {
$('#frmPost').context.forms[0].submit()
}
0
user5292083

私はこの問題を抱えており、時にはその愚かさもありました。小文字の「b」の__doPostbackとして作成しましたが、大文字の「B」の__doPostBackでした。

0
Mark Ibanez

LinkBut​​tonをクリックしたときにこれを取得していました。マークアップにOnClick="LinkButton2_Click"を追加することでこれを解決しました。

0
WhatsInAName