私のWebアプリケーションでは、作成および編集用のフォームを提供する必要があります。作成用と編集用のフォームには若干の違いがあるため、私の見解では次のようなことを考えています。
<form>
// a lot of htnl goes here
@if (editing)
{
// some more fields shown in edit mode
}
@if(!editing)
{
// some stuff shown in create mode
}
私は常にif
ステートメントをビューに含めないように努めてきましたが、今回は、HTMLの大部分を2か所にコピーする以外、他のオプションは表示されません。これは適切な「プレゼンテーションロジック」であり、他のオプションはありますか?
プレゼンテーションロジックは、特定のビューに対してビジネスデータを正しい方法で表示するために必要なロジックと計算で構成されます。
複雑なグラフィックビューの場合、これは非常に複雑な計算(たとえば、各円スライスのサイズの計算と円グラフのラベルの配置)になる可能性がありますが、主な特徴は、現在のビューに関連しており、ビジネスデータを変更することはありません。
編集/作成モードのフィールドの選択がプレゼンテーションロジックの適切な使用であるかどうかは、議論の余地があります。一部には、カスタマイズの種類と量によって異なります。
たとえば、違いがタイトルの変更だけの場合、または1つまたは2つのフィールドをいずれかのモードで読み取り専用として表示する場合は、1つのビューを持ち、モードを動的に選択するのが適切です。
一方、私の最初の反応は、実際には2つの異なるビューである必要があるというものでした。この場合、共通の部分は3番目のファイルからインポートされます(ヘッダーとフッターがビューに追加される頻度に類似しています)。
Razorビューで1つまたは2つの@ifステートメントを使用することは完全に合理的です。
彼らは@ifをRazorに追加しました-これは使用するためのものです。
コードは1つの@ifに短縮できます。
@if (editing)
{
// some more fields shown in edit mode
}
else
{
// some stuff shown in create mode
}
別の方法は、3つのビューを使用することです。
DisplayTemplatesとEditorTemplatesをチェックしてください。これらは、読み取り専用のビューと編集可能なビューを分割するための良い方法です。
http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html