2016-08-23 27 views
0

私はASP.Net ApplicationのシンプルなWebFormsを持っています。データベース内のレコードを挿入および更新するために使用されるいくつかのページがあります。フォームに入力値を送信しないようにするにはどうすればいいですか?

ただし、一部の入力制御値を更新しないでください。だから、ユーザが値を更新しないようにdisabled属性を設定しました。しかし、ユーザーは開発者ツールから有効にして値を直接変更することもできます。

私はjavascriptを使用して要素からname属性を削除すると、そのコントロールの値は形で提出されず、それがサーバ側に影響されることはありません(それは完璧に動作します)。しかし、ユーザーがname属性に同じvaule(、つまり'ctl00$ContentPlaceHolder2$txtBranchCode')を再割り当てすると、入力ボックスの値はに再送信されます。

コード:私は、私の問題は簡単に解決することができる形式で提出する要素の値を防ぐことができるかどう

<td align="left"> 
    <input name="ctl00$ContentPlaceHolder2$txtBranchCode" type="text" value="HO" 
     id="ctl00_ContentPlaceHolder2_txtBranchCode"> 
</td> 

さて、私が欲しいものです。私はすべてのページに条件を追加することができません"コントロールが無効になっている場合は更新しないでください。"ページがたくさんあり、それぞれのページで同じ作業をしなければなりません。共通の解決策がある場合は、それが良いでしょう。

+0

これを行うための唯一の安全かつ安全な方法は、サーバー上にあることです。その値を使用するかどうかをチェックし、そうでない場合は無視しなければなりません。あなたがすでに述べたように、クライアント上で行われたことはすべて変更することができます。 – webnoob

+0

はい@webnoob私はサーバー側のバリデーションが優れていることを知っていますが、私はすべてのページを変更することはできません。だから、私は共通の解決策を見つけようとしています。 aspフォームの登録を解除することができれば、Asp Formはそのコントロールの値をポストしません。 – Shell

+0

唯一の安全な方法です。アーキテクチャに関するこの問題に直面している場合は、将来、再びその問題に直面する可能性があります。なぜ同じロジックが多くの場所で行われなければならないのですか?この検証を行うことができる基本クラス/サービスにいくつかの機能を凝縮できませんか?私はそれが導入するための多くの仕事を意味するかもしれないが理解しますが、それはこれがどれほどの要件であるかによって異なります。 – webnoob

答えて

0

クライアント側のコードを信頼して、データベース内の更新を制御することはできません。 あなたがすべきことは、仕事をするためにサーバー側のコードを書くことです。クライアント側のコードはクライアントが簡単に操作でき、信頼できません。

0

入力制御値を更新しない場合は、Visible="false"を設定して制御をレンダリングしないでください。

サーバー側の検証はより安全ですが、クライアント側の検証ではユーザーエクスペリエンスが向上するため、トレードオフがあります。理想的には、クライアント側の検証でユーザーエクスペリエンスを向上させ、サーバー側の検証でサーバーリソースとデータベースを保護することが理想的です。

+0

コントロールを見えなくすることはできません。ユーザーはコントロールの値を見ることができますが、編集することはできません。私のアプリケーションにはたくさんのページがありますので、コントロールがすべてのページで有効になっている場合、値を更新する条件を設定することはできません。 – Shell

関連する問題