2016-05-19 20 views
0

私は、ユーザーにTDFテキストファイルを送るレポートを持っています。 2つのフィルタが選択され、ユーザが提出する前に2つのフィールドが記入され、「ダウンロード」ボタンがクリックされた場合に表示されるフレンドリなエラーメッセージが表示されます。私のテスト部門では、ファイルのダウンロードが成功するとこのエラーが消えてしまいます。応答オブジェクトは、エラーメッセージが消えるように、ポストバックからページを停止します。VBコードはJavaScriptを介してボタンをクリックしたとき発火しない

この問題を回避するために、TDFを作成するコードに追加された目に見えない余分なボタンを追加し、表示ボタンにJavascriptのクリックイベントをアタッチしました。

<asp:Button ID="btnSubmit" runat="server" Text="" Style="visibility:hidden;" /><asp:Button ID="btnDownload" runat="server" Text="Download TDF" OnClientClick="document.getElementById('ctl00_MainContent_btnSubmit').click();" /> 

私の問題は、この隠されたボタンがクリックされるとコードビハインドが発砲しないということです。私が隠されたボタンに警告を発すると、それはちょうどうまく発火し、ボタンがクリックされていることを伝えます。イベントは、ボタンのイベントリストに登録されている、と私はイベントリスナーが起動有線ています:

Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click 

を私の代わりに参照するにはダミーのエラーメッセージを設定し、TDFファイルを作成し、ダウンロードを行うには、すべてをコメントアウトしていますページが反応する場合、それはしません。

なぜコードが実行されていないのですか?

+0

フォーム送信が欠落しているようです。 http://stackoverflow.com/questions/9784565/automatically-submitting-an-asp-net-form-with-javascriptおよびhttp://stackoverflow.com/questions/3242365/how-to-submit- asp-net-with-javascript-after-custom-validationを実行します。 – Alex

答えて

1

2つのポストバックがbtnDownloadボタンをクリックすると、同じ時間に起動されているように私には見える、と彼らはお互いに競合すること:

  1. btnDownload自体
  2. によって引き起こさポストバックによって引き起こさポストバック私はあなたのコードをテスト

OnClientClickbtnSubmit.click()呼び出しが、私はやや予測不可能な結果を​​得る:イベントハンドラbtnSubmit_Clickが時々呼ばれ、S ometimesではない。

エラーメッセージがもはや必要ないことを、クライアント・コードで検出することができた場合は、ポストバックが発生する前に、あなたは、OnClientClickに直接それをクリアすることができが:

<asp:Button ID="btnDownload" runat="server" Text="Download TDF" OnClientClick="clearErrorMessage();" /> 

function clearErrorMessage() { 
    if (/* All required fields are filled */) { 
     // Clear the error message 
    } 
} 

そうでない場合は、次の2つに対応する必要があるかもしれませんコードハンドバックのbtnDownloadというイベントハンドラのステップ:最初の応答でエラーメッセージがクリアされ、起動クライアントスクリプトを追加して2回目のポストバックを強制することができます。しかし、それは良く見えません。

+0

私は既に2つのボタンを使って私の魂を売ったような気がします。残念ながら、マスターページの「エラー」パネルがvisible.falseに設定されているため、エラーが既に表示されていない限りjavascript DOMはそれを見つけることができないため、最初のボタンに配置したJavaScriptはすべてエラーを投げます。 起動スクリプトを追加して、2回目のポストバックを強制的に実行する必要があります。ありがとうございました! – Jessa

関連する問題