2009-03-30 8 views
4

私はbtnCreate_OnClickイベントの後に、最初のpage_loadと同じようにフォームをデフォルト値にリセットしようとしています。この問題は、PostBack、すべてのテキストボックスおよびその他のコントロールの後で、ViewState値を再ロードします。私はDropDownList選択のサーバーイベントのためにviewstateを非アクティブ化できません。私がこれまでに見つけた唯一の方法は、クリックイベントの後に自分自身にリダイレクトすることですが、これはページを2回読み込み、そのために悪い解決策です。 ViewState.Clear()を試してUpdatePanelを更新しましたが、失敗しました。ポストバック後にasp.netフォームをリセットするにはどうすればよいですか?

すべてのコントロールに対してループを作成し、txtXXXXX.Text == ""を設定することができましたが、それは最良のアイデアではないと確信しています。

Page.Reset()のようなものは完璧なものでしたが、存在しませんでした。

私のこの問題に関する考えはありますか?

おかげ

+0

フォームのリセット以外のbtnCreate_OnClickイベントにコードがありますか? –

+0

いいえDBからStoredProcも実行します。 –

答えて

12

実行可能ならば、私は通常ちょうど最初から同じページをリロードするのResponse.Redirectを使用する場合があります。

ページへの最初のGETリクエストは、通常、後続のPOSTよりもコストが低いので、避ける理由はそれほどありません。

+2

これは、問題のレコードがページへのリダイレクトを介してロードされる場合にのみ機能します。したがって、これは常に使用することはできません! – renegadeMind

0

一つの方法は、必ずしも理想的な、Javascriptを使用してデフォルトに値をリセットすることです。大きなフォームの場合は、醜いかもしれませんが、自己リダイレクトを行う必要はありません。

また、代わりのResponse.RedirectのServer.Transferをして​​みてください(/ 自己 /)

2

ビューステートのために自己リダイレクトがトリッキーになります。

ボタン用のhtml入力タイプの「リセット」がありますが、msftがviewstate/asp.netに入れたものが何であるかわかりません。これは一般的に単純なjavascriptフォームで機能します。

例:Googleからの

<input type="button" value="Reset" onclick="document.<formId>.reset();">

----^

-2

我々のケースで最高のパフォーマンスソリューションは、それぞれに手動で設定することでしたが、クリックイベントの元のデフォルト値を制御します。

textbox1.Text = null; 
textbox2.Text = null; 

これにより、double page_loadとループが回避されます。 UpdatePanelはレンダリングの前に実行されているため、UpdatePanelを更新する必要はありません。

多分複雑なWebアプリケーションでは、ほとんどの人がこれを解決策として受け入れるように思われるため、リダイレクトする必要があります。

コントロールごとにデフォルト値が設定されています。

は、私たちは、私はこのことができます場合は知らないが、私はそのフォーム上のすべての入力の名前を変更するコード

protected void Button_Reset_Click(object sender, EventArgs e) 
{ 
    Session["ViewState"] = null; 
    Response.Redirect("/Roster/DRAC/Create.aspx"); 
} 
5

ありがとうございました私はフォームを提出する前に、javascriptを使って新しい値を得たいと思っています。ネットページはフォームからの値と、ポストバックがないかのようにページを再ロードするページのコントロールに一致することはなくなりました。私はフォームに新しい値を追加するので、どのボタンがフォームを送信したか知っているので、そのロジックを使ってすべてのコントロールにロードするものと、フォームデータを処理する方法を決定します。

$("#Bset").children().click(function() { //all the btns click function 
    $.each($("form").find("input"), function(e,v) { //could filter this to subset of inputs 
     $(v).attr("name", "_" + $(v).attr("name")); // ctrl1 becomes _cntrl1 
    }); 
    $("form").append("<input type='hidden' id='b' name='b' value='" + $(this).text() + "' />").submit(); 
}); 

はその後

protected void Page_Init(object sender, EventArgs e) 
{ 
    id = int.Parse(Request.QueryString["id"]); 
    bk = db.dc.getDetailBK(id).Single(); 
    if (Request.Form.Count > 0) 
     doPostBack(); 
    mrl = (from a in db.dc.getMetricQTD(id, null, null, loadSavedGoals) select a).ToList(); 
} 

の背後にあるコードでは、私は、その後にロードされたMRL値を変更し、リフレッシュしてそのデシベルなどとの対話、フォームデータを処理dopostbackで物事を行うことができますフォーム内の変更されたかどうかにかかわらず、mrlに関連付けられた入力内のデータ。

もう1つの方法は、Webサービスを使用してdbのやりとりを処理し、window.locationを呼び出してページを更新するボタンをいくつか結ぶことです。

$アヤックス({
URL: "Webサービス/ dbfunction?"
データ:{BTN押され、いくつかのフォーム値等...}
成功:関数(){window.locationの(「samepage .aspx?id = xxx ");}
...
});

これは、サーバー側で応答リダイレクトする必要もありません。

+0

ちょっと言っておきたいのですが、このような単純な解決策を探していました。ありがとう、Rajan! –

0

のわずか2行でASP.NETフォームページをリセットすることができ、あなたに

関連する問題