RC1 では、ビューを作成するためのテンプレートの動作が変更されました。
リリース候補に関する Scott Gu の投稿で説明されているように、新しく作成された aspx ビューには、既定でコード ビハインド ファイルがなくなりました。
フィードバックに基づいて、デフォルトでコード ビハインド ファイルを持たないようにビュー テンプレートを変更しました。この変更は、MVC アプリケーションのビューの目的を強化するのに役立ちます (純粋にレンダリングに関するものであり、レンダリング以外の関連コードを含まないことを目的としています)。ほとんどの人にとって、プロジェクト内の未使用のファイルは削除されます。
RC ビルドでは、ジェネリックを使用する基本クラスからビュー テンプレートを継承するための C# および VB 構文のサポートが追加されました。たとえば、以下では、Edit.aspx ビュー テンプレートでこれを使用しています。このテンプレートの「継承」属性は、ViewPage 型から派生しています。
コードビハインドにビュー固有のコードを記述して、ビューを出力できることが本当に気に入っています。特に、ページのいくつかの部分でロジックを繰り返しており、部分的なビューを作成することを正当化できない場合は特にそうです。
私の実際の質問:スコットはデフォルトで言った- これは、その動作を変更できることを意味しますが、どこにあるのかわかりません。出来ますか?コードビハインド ファイルを手動で作成し、変更するのは面倒です。
これにより、追加の問題も発生します。
- モデルの名前をリファクタリングすると、ビューのディレクティブが更新されません。これは世界の終わりではありませんが、完全に強く型付けされていることの明確な利点の 1 つです。
補遺:なぜコード ビハインドが必要なのか疑問に思っている方のために、考えられる理由のいくつかを以下に示します。これは、私が考えたほぼすべての累積的なリストです。言うまでもなく (そうするべきです)、既にモデルに含まれているデータ以外のデータにアクセスしてはなりません。LINQ はモデル データの単純な操作には問題ありませんが、LINQ to SQL はそうではありません。MVC は、これを既に知っているはずの人のためのものです。それが私が気に入っている理由です。賢い人によって賢い人のために作られています。
- レガシ ASP.NET コントロールのデータバインディング - 代替手段がない場合、または一時的な解決策が必要な場合。
- ネストされた、または階層化された HTML を作成するために再帰を必要とするロジックを表示します。
- 一時変数を使用するロジックを表示します。タグスープでローカル変数を定義することを拒否します! 少なくともビュークラスのプロパティとしてそれらを望んでいます。
- 1 つのビューまたはモデルのみに固有で、HtmlHelper に属さないロジック。補足として、HtmlHelper が「モデル」クラスについて知る必要はないと思います。モデル内で定義されたクラス ( など) を知っていれば問題あり
IEnumerable<Product>
ませんが、たとえば、ProductModel
. - HtmlHelper メソッドは、入力時にすべてのビューから表示されるようになり
Html+dot
、このリストを可能な限り最小限に抑えたいと思っています。 - オブジェクト指向の方法で HTML を生成するために、その名前空間で および他のクラスを使用するコードを記述したい場合
HtmlGenericControl
(または、移植したい既存のコードがある場合) はどうでしょうか。 - 将来、別のビュー エンジンを使用することを計画している場合はどうなりますか。後で再利用しやすくするために、タグ スープとは別にいくつかのロジックを残しておきたいと思うかもしれません。
- モデル クラスの名前を変更し、view.aspx に移動してクラス名を変更することなく、ビューを自動的にリファクタリングできるようにしたい場合はどうすればよいでしょうか。
- 「タグスープ」を台無しにしないと信じていない HTML デザイナーと調整していて、.aspx.cs ファイルに非常に基本的なループを超えて何かを書きたいとしたらどうなるでしょうか。
「コードビハインド」は、「ビューの部分クラスの残りの半分」とは対照的に、伝統的に「イベント処理コード」を意味すると解釈されてきたため、人々は「コードビハインド」に対して偏見を持っていると思います。
ビューの分離コードは問題ありません。
フォルダ構造が少し乱雑になることに異論はありませんが、それが+
アイコンの目的です。「ビューの追加」を使用してコードビハインドでビューを作成する機能が欲しいだけです。