5

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 ファイルに非常に基本的なループを超えて何かを書きたいとしたらどうなるでしょうか。

「コードビハインド」は、「ビューの部分クラスの残りの半分」とは対照的に、伝統的に「イベント処理コード」を意味すると解釈されてきたため、人々は「コードビハインド」に対して偏見を持っていると思います。

ビューの分離コードは問題ありません。

フォルダ構造が少し乱雑になることに異論はありませんが、それが+アイコンの目的です。「ビューの追加」を使用してコードビハインドでビューを作成する機能が欲しいだけです。

4

6 に答える 6

2

あなたの質問に直接答えるには、このデフォルトを変更できないと思います。テンプレート (%programfiles%\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates" のどこかにある) を変更してみることができますが、確かなことはわかりません。

ただし、このシナリオの「MVC の方法」は、おそらく別のクラスでカスタム ヘルパーを作成することです。

私は最近、Gravatar ( http://www.gravatar.com ) を使用してプロフィール写真を生成する Web アプリを作成し、ビュー全体に同じカスタム <img> タグを書き続けたので、ヘルパーを作成しました: Html.Gravatar( )

静的クラス「MyHelpers」または「GravatarHelpers」または「FooHelpers」を作成し、次のようなシグネチャを持つ静的拡張メソッドを追加するだけです。

public static string Gravatar(this HtmlHelper htmlHelper, string emailAddress) {
    return htmlHelper.Image(...);
}

または、厳密に型指定されたビュー (ViewPage<T>) を使用していて、それを利用したい場合は、HtmlHelper<T> を拡張できます。

public static string Foo<TModel>(this HtmlHelper<TModel> htmlHelper, ...) {
    // Do stuff
    return // Stuff
}

UrlHelper または AjaxHelper の HtmlHelper を簡単に切り替えることができます。ヘルパーの ViewContext プロパティから ViewData などにアクセスすることもできると思います。

于 2009-01-28T22:46:31.470 に答える
2

それは本当に素晴らしいアイデアのようには思えません。私が読んだすべての解説は、「分離コードを使用しないでください。存在しないことを望みます」と述べています。そして、私は同意します。hereHtmlHelperのような拡張メソッド (従来は on )でロジックを記述してみることができます。

于 2009-01-28T22:50:40.243 に答える
1

私は、分離コード ファイルは依然として有用であると考えています。多くの人が、MVC が目指している設計パターンを壊す方法を提供しているため、彼らがいかに悪いかについて話していますが、彼らは本質的にこれを行っていません。ビューはばかげているはずだと言うこともできますが、ビューが複雑なビジネスロジックに関係しているとは想定されていないと言う方がおそらくより正確だと思います。ただし、プレゼンテーションの側面に関係する必要があります。そのため、単純な html を超えるコードを必要とする情報を表示するための要素がまだあります。これは、コードが必要な場所でそれをサポートするコードの背後にあるマークアップにマークアップ自体が関係しているという懸念の分離の推論 (ビューの純粋な読みやすさは言うまでもなく) に従います。

Luis Abreu は、このテーマについて優れた記事を書いています。

asp.net mvc の分離コード ファイルは悪ではありません

于 2009-06-12T19:17:31.357 に答える
1

参考までに - Visual Studio 2010 では、ビューを含むファイルに適切な名前のコード ファイルを追加するだけで、新しいコード ビハインド ファイルがビューに自動的に関連付けられます。ファイルをリンクするために、ファイルを削除して再度追加する必要はありません。ただし、継承されたクラスを変更して、@Harry が説明するように機能させる必要があります。

于 2010-10-04T18:10:11.573 に答える
0

また、デフォルトでコードビハインドを使用したいのですが、変更する方法が見つかりません。このページでは、コードビハインドをページに追加する方法について説明します:http: //msdn.microsoft.com/en-us/magazine/cc301556.aspx

私の意見では、コードビハインドクラスは、データバインディングの制御や、必要に応じてデータに小さな変更を加えるのに理想的です(日付や通貨のフォーマットなど)。また、リピーターはデータリストを表示する最も簡単な方法ですが、匿名型のコレクションを反復処理する方法はまだ見つかりません。ページにforステートメントがあるだけで、PHP:Sを思い出します。

于 2009-01-30T21:12:56.907 に答える
0

ここでこの質問に答えました:

コード ビハインド ページを部分ビューに追加する方法

これは特にトリッキーではなかったようで、非常に実行可能です

Ok。

最初: .cs (つまり、view.ascx.cs) の規則でクラス ファイルを追加します。

2 番目:「using System.Web.Mvc;」を追加します。クラスへ

3 番目: クラスを「ViewUserControl<>」から継承するように変更します。

4 番目: ビューのヘッダーに以下を追加します。

CodeBehind="View.ascx.cs" Inherits="Project.Views.Shared.View"

5 番目: ソリューションからファイルをコピーし、ドラッグして 2 つを再度関連付けます。

注: これを通常の MVC ビューで使用するには、「ViewPage」からクラスを継承する必要があります。

于 2009-03-25T07:06:57.693 に答える