1

私はかなり複雑なフォーム (実際にはユーザー コントロール) を持っており、ポストバックする必要のないテキスト ボックス コントロールが 1 つあります。投稿からコントロールを削除する方法はありますか? はい、このテキストボックスは編集可能です。

詳細: これはクレジット カード処理フォーム用であるため、「最終」送信は別のサイトのページに投稿されます。ただし、これに先立って、サーバー側で多くの処理が行われます。クレジット カード番号のテキスト ボックスを別のページに移動できることはわかっていますが、この要件は非常に遅れており、多くの作業をやり直す必要がないように努めています。

4

2 に答える 2

2

The easiest way would be to use an html input as opposed to an ASP TextBox. These are not accessible from code if runat="server" is not set on them.

Or use the viewstate property (http://msdn.microsoft.com/en-us/library/system.web.ui.control.enableviewstate.aspx)

于 2012-06-27T16:23:24.580 に答える
0

したがって、別のサイトを指すアクションを使用してユーザーのブラウザにレンダリングされるフォームがあり、フォームの送信時にフォームフィールドの1つが送信されないようにする必要があります。

その場合、値が投稿されていないことを絶対に確認できないように思えます。javascriptを使用してこれを解決する方法はたくさんあります(入力を無効にする、送信する前に値をクリアするなど)が、スクリプトがオフになっている場合は運が悪いと思います。

ただし、フォームを他のサーバーに送信する準備をすることができるので(フォームのアクションを変更するか、PostBackUrlでボタンを有効にする)、テキストボックスのEnabledプロパティをfalseに設定することもできると思います。つまり、他のサーバーに投稿する前に、最終ページで編集することはできなくなります。または、テキストボックスaを非表示にして(まったくリネリングされないように)、代わりにフィールドをラベルまたはリテラルとして表示することもできます。

ただし、それでも、フォームのビューステートにシークレット値が含まれていないことを何らかの方法で確認する必要があります。ラベルまたはリテラルを使用する場合はどちらになりますか。また、最後のポストバックで無効化または非表示にされたテキストボックスの場合。通常、ビューステートはbase64でエンコードされた文字列であるため、そこからクレジットカード番号を見つけるのは簡単です。他のサーバーに投稿するためにフォームを設定する前に、最後の投稿で問題のコントロール(またはページ全体)のビューステートをオフにしてページに戻すことで、これを修正できる可能性があります。

どちらがサーバーへの最後のポストバックになるかわからない場合は、さらに重要な変更を加えないと運が悪いと思います。ダウナーになってすみません。Asp.Net Webフォームでは、一見些細なことのいくつかは難しいものです。

たぶん、他のサーバーに送信する必要のあるデータだけを入力する別のページを追加して、そのような「確認ページ」を作成することもできます。そのページでは、ビューステートをオフにし、要約されたすべてのデータを表示し(ラベルやリテラルなどを使用)、投稿する実際のデータを非表示フィールドとしてフォームに含めることができます。次に、ユーザーが「確認」すると、そのフォームは他のサーバーに投稿されます。

于 2012-06-27T21:02:28.813 に答える