私はビューとモデル(たとえば車)を持っています。1つのフィールドはフォームで編集可能です(他の情報のみが表示されます)。ビューフォームが投稿されると、編集可能なプロパティだけでなく、すべての情報が必要になります。ただし、他のすべてのプロパティはnullです。
以前はデータを投稿するための非表示フィールドを作成していましたが、非表示フィールドよりも非表示フィールドの方が多いと、コードが非常に汚くなります。
非表示フィールドを使用せずにモデルのすべてのプロパティを投稿する方法はありますか?
私はビューとモデル(たとえば車)を持っています。1つのフィールドはフォームで編集可能です(他の情報のみが表示されます)。ビューフォームが投稿されると、編集可能なプロパティだけでなく、すべての情報が必要になります。ただし、他のすべてのプロパティはnullです。
以前はデータを投稿するための非表示フィールドを作成していましたが、非表示フィールドよりも非表示フィールドの方が多いと、コードが非常に汚くなります。
非表示フィールドを使用せずにモデルのすべてのプロパティを投稿する方法はありますか?
編集可能なフィールドのみで ViewModel を使用する必要があります。ビューでは、モデルの ID をデータベースに隠しフィールドとして配置するだけです。
コントローラーで、データベースからモデルを取得します。次に、このアイテムを実際に変更できるかどうかを確認します (たとえば、誰かが Firebug を使用して非表示フィールドの ID を変更できます)。
次に、ViewModel のフィールドを使用してデータベース モデルを更新し、モデルをデータベースに再度保存します。
ビューでCARモデルを使用すると、誰かが許可したよりも多くのフィールドを変更する可能性があります... CarViewModelを使用すると、モデルバインダーがビューモデルのプロパティをバインドするだけなので不可能です。
html 形式で投稿されるデータは、入力の内容です。投稿でこのデータが必要な場合、非表示フィールドを使用しても問題はないと思います。それが非表示フィールドの目的です。
そうは言っても、隠しフィールドの量を本当に減らしたい場合は、これらすべての情報を 1 つのフィールドで「シリアル化」してから、投稿で「逆シリアル化」することができます。または、カスタム モデル バインダーで。
しかし、Asp.Net MVC でそのまま使用できる ModelBinder の魔法が必要な場合は、フォーム フィールドを使用する必要があります。
非表示フィールドに情報を投稿することに慣れている場合は、それらをクエリ文字列に含めるという別のオプションがあります。