0

コードビハインドに追加したJavaScriptに問題があります。ここで達成しようとしている目標は、ページの読み込みで別のポストバックを実行することです。さて、あなたはこれを奇妙に感じるかもしれませんが、私の狂気には方法があります。

ASP.Netウィザードには、別のステップで入力された日付を含むテキストボックスがあります。この日付は、他の3つのコントロールに財務情報を入力するために使用されます。このステップの負荷時に、これら3つの他のコントロールを設定する必要があります。今、私は単純にを実行しようとしましたpage_loadが、特定のコントロールが存在しないか、日付がテキストボックスにないため、これは機能しません。私もpage renderメソッドでこれを実行しようとしましたが、同じ理由でこれも機能しませんでした。

だから、私はダブルポストバックを実行するJavaScriptを使用することに頼りましたが、それはあらゆる種類の問題を引き起こしています。

Page_Loadのコードは次のとおりです。

 Dim validateFinancial as String = "<script language='javascript'>window.onload = function() ( ValidateFinancialDate() { __doPostBack('<%= UpdatePanel2.ClientID %>'); return false; })</script>"
 Page.ClientScript.RegisterStartUp(Me.GetType(), "MyScript", validateFinancial, false)

起動しておらず、ブラウザの左下隅に表示されるjavascriptエラーボックスに「;」がないことを示しています。javascriptコードを削除し、文字列に関数名を付けてマークアップに追加すると、エラーが発生しますが、これをWebサーバーに投稿すると、ページ全体でAJAXコントロールが失敗します。

これを機能させる方法はありますか?

4

2 に答える 2

2

あなたの問題はそれです

<%= UpdatePanel2.ClientID %>

解釈されません。JavaScript をポストバックしたい時点で、ASP はすでにページのレンダリングを終了しています。UpdatePanel2.ClientID 値を渡す別の方法を見つける必要があります。

于 2013-01-18T12:25:30.853 に答える
1

<%= UpdatePanel2.ClientID %>バックエンド側では使用しないでください。上記のメソッドの戻り値でreplaceyourを__doPostBack('<%= UpdatePanel2.ClientID %>')使用して同等のものを取得します。ClientScript.GetPostBackEventReference(UpdatePanel2, string.Empty);__doPostBack('<%= UpdatePanel2.ClientID %>')


より詳細な:

最初から始めましょう。ページがクライアントにロードされた後、UpdatePanel2によってポストバックを開始する必要があります。正しいJS関数パターンは次のとおりです。

window.onload = function() { ValidateFinancialDate(); %Do postback%; return false;};

UpdatePanel2の%Do postback%関数呼び出しを取得するにはClientScript.GetPostBackEventReference(UpdatePanel2, string.Empty)、バックエンドメソッドを使用する必要があります。これにより、UpdatePanel2コントロールによって開始されたpostback要求を行う正しいJS__doPostBack関数呼び出しが生成されます。

したがって、C#での作業例は次のようになります。

string postbackReference = Page.ClientScript.GetPostBackEventReference(UpdatePanel2, string.Empty);
string validateFinancial = "window.onload = function() { ValidateFinancialDate(); " + postbackReference + "; return false;};";
Page.ClientScript.RegisterStartUp(this.GetType(), "MyScript", validateFinancial, true);

RegisterStartUpメソッドの真の引数に注意してください。これにより、validateFinancialスクリプトの内容が自動的にタグにラップされます。

しかし、ダブルポストバックによるこの回避策は、解決しようとしている問題に対して人為的なもののようです。より多くのソースコードを提供すれば、より良い解決策を見つけることができます。

于 2013-01-18T12:30:52.907 に答える