私のページのいずれかで__doPostBackを呼び出そうとすると、そのエラーが発生します。プロジェクト内のすべてのページは__doPostBack関数を使用しますが、この特定のページではJavascriptエラーが発生します。
私はインターネットで探していましたが、私が読んだ唯一のことは、閉じていないタグがあるときにこのエラーが発生したことですが、サイトとそのOKを確認します。
エラー:__doPostBackは定義されていませんソースファイル:htt:// localhost:99/ProjectName/Disable.aspx行:1
__doPostBack()
は、ポストバックを引き起こす可能性のあるASP.NET WebControlによって自動的に含まれる必要があります。書いたJavascriptで手動で呼び出しているように聞こえます。その場合、WebControlを含めて、その関数がページに挿入されていることを確認する必要があります。
ランタイム/クライアント側のエラー__doPostBack
が未定義であるため、数時間悩まされます。ネット上で誤解を招く/誤ったヘルプがたくさんありました。 Page_Load
ファイルのdefault.aspx.cs
イベントに次のコード行を挿入すると、システムとGoDaddyの運用環境ですべて正常に機能しました。
ClientScript.GetPostBackEventReference(this, string.Empty);
ページにポストバックを引き起こすコントロールがない場合、__ doPostBack()は関数定義として出力されません。これをオーバーライドする1つの方法は、Page_PreRender()に次の行を含めることです。
this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty);
この関数は、__ doPostBack()を呼び出す文字列を返します。しかし、ページに__doPostBack()関数定義を強制的に出力させます。
これが私に起こった理由です:スクリプトタグには常に終了タグが必要だということを誤って忘れていました。
<script src="/Scripts/appLogic/Regions.js" />
スクリプトタグを修正しました。
<script src="/Scripts/appLogic/Regions.js" type="text/javascript" ></script>
そして正気が戻った。
このコードを.aspxに追加するだけです
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
ClientScript.GetPostBackEventReference(this、 "");
RegisterRequiresPostBack メソッドを呼び出してみてください。 ASP.NETランタイムに__doPostBackコードを含める必要があります。
基本的に何が起こっているのかというと、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システムを使用して企業向けのサイトで作業している場合は、プラットフォームの更新によって作成された新しいバグを導入するのではなく、これは簡単なソリューションかもしれません。
独自のページコードを記述し、runat="server"
フォーム要素。
私の問題の解決策:IIS ASP.NET Webformsは、ユーザーエージェント文字列に応じてWebページを生成します
My IISはIE11ブラウザーの定義がなかったため、JavaScriptをサポートしていない非常に単純なブラウザープロファイルにデフォルト設定されていました。
別の方法: IE11ブラウザ定義ファイルを設定
このスレッドがアクティブになってからしばらく経ちましたが、将来登場する人のためにもう少し情報を追加します。
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
これを接続するためのより良い/よりクリーンな方法があると確信していますが、その背後にあるアイデアが得られることを願っています。
this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty);
このトリックはうまくいきました。それでもレンダリングされなかった理由を知りたいと思っていました...
ありがとうございました!
私は今日この問題を抱えていましたが、残念ながらあなたのものも含めて、私が見つけた解決策はどれもうまくいきませんでした。だから誰かがこれを読んで、それが彼らのためにうまくいかないなら、これを試してください
http://you.arenot.me/2010/11/03/asp-net-__dopostback-is-not-defined/
しかし、何が間違っていたのかを解決するプロセスを通して私を助けてくれてありがとう!
私はこのエラーがあり、挿入して解決しました:
<form runat="server" style="display: none"></form>
私にとって「__doPostBack」はすべてのページで機能しませんでした。Visualstdioの新しいバージョンでプロジェクトをコンパイルし、ソリューションエクスプローラーでプロパティをダブルクリックし、「ターゲットフレームワーク」を.Net framework 4.0から.Net framework 3.0以降に変更したためですプロジェクトを再構築し、それが働いた。
古い質問ですが最近の回答:ScriptManager
がある場合は、EnablePartialRendering
が有効になっているかどうかを確認してください。もしそうなら、それを無効にします、なぜそこに問題があるのか分かりません...
これは、私のスクリプトが「破棄」されたIframe内にあったために取得されていました(Telerikの「ウィンドウ」が閉じられていたため)。 iframe内で_dopostback()を定義するコードはなくなりましたが、iframe内で_dopostback()を呼び出すコードはまだぶら下がっていました。 JavaScriptが大好き!
lnkDeactivate.Attributes("onclick") = ClientScript.GetPostbackClientHyperlink(lnkDeactivate, "deactivate")
runat="server"
属性を持つform
要素でサーバー側のコントロールをラップするとうまくいきました。 ASP環境によれば、runat="server"
属性を持つform
要素は1つだけである必要があります。そうでない場合、重大な問題が発生する可能性があります。
<form runat="server" id="form1">
<!-- Server side controls go here -->
</form>
このビンテージスレッドへの別の追加....
JQuery Mobileを使用してサイトを開発しているときにこれらの症状がありましたが、その原因は、影響を受けたページにたどったリンクがrel="external"
属性が設定されています。
これは、JQueryが新しいページのコンテンツをAJAX経由でロードし、すべてを再ロードするのではなく、現在のページに「インジェクト」することを意味しました。したがって、必要なポストバックjavascriptは、ページ全体を更新するまで存在しませんでした。
私は、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()
}
私はこの問題を抱えており、時にはその愚かさもありました。小文字の「b」の__doPostbackとして作成しましたが、大文字の「B」の__doPostBackでした。
LinkButtonをクリックしたときにこれを取得していました。マークアップにOnClick="LinkButton2_Click"
を追加することでこれを解決しました。