動的に型指定されたビューと 厳密に型指定されたビュー
作成者: Rick Anderson
ASP.NET MVC 3 でコントローラーからビューに情報を渡すには、次の 3 つの方法があります:
- 厳密に型指定されたモデル オブジェクトとして。
- 動的型として (動的 @model を使用)
- ViewBag を使用して
動的で厳密に型指定されたビューを比較して比較するための単純な MVC 3 Top Blog アプリケーションを作成しました。 コントローラーは、ブログの簡単な一覧から始まります:
using System.Collections.Generic;
using System.Web.Mvc;
namespace Mvc3ViewDemo.Controllers {
public class Blog {
public string Name;
public string URL;
}
public class HomeController : Controller {
List<Blog> topBlogs = new List<Blog>
{
new Blog { Name = "ScottGu", URL = "http://weblogs.asp.net/scottgu/"},
new Blog { Name = "Scott Hanselman", URL = "http://www.hanselman.com/blog/"},
new Blog { Name = "Jon Galloway", URL = "http://www.asp.net/mvc"}
};
public ActionResult IndexNotStonglyTyped() {
return View(topBlogs);
}
public ActionResult About() {
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
}
IndexNotStonglyTyped() メソッドを右クリックし、Razor ビューを追加します。
[厳密に型指定されたビューを作成する] ボックスがチェックされていないことを確認します。 結果のビューには、次の内容はあまり含まれません:
@{
ViewBag.Title = "IndexNotStonglyTyped";
}
<h2>IndexNotStonglyTyped</h2>
On the first line of the Views\Home\IndexNotStonglyTyped.cshtml file, add the model directive and the dynamic keyword.
@model dynamic
厳密に型指定されたビューではなく動的なビューを使用しているため、Intellisense は役に立ちません。 完成したコードを以下に示します:
@model dynamic
@{
ViewBag.Title = "IndexNotStonglyTyped";
}
<h2>Index Not Stongly Typed</h2>
<p>
<ul>
@foreach (var blog in Model) {
<li>
<a href="@blog.URL">@blog.Name</a>
</li>
}
</ul>
</p>
次に、厳密に型指定されたビューを追加します。 コントローラーに次のコードを追加します:
public ActionResult StonglyTypedIndex() {
return View(topBlogs);
}
これはまったく同じ戻り値 View(topBlogs) であることに注意してください。厳密に型指定されていないビューとして呼び出します。 StonglyTypedIndex() 内を右クリックし、[ビューの追加] を選択します。 今回は、Blog Model クラスを選択し、スキャフォールディング テンプレートとして [リスト] を選択します。
新しいビュー テンプレート内では、Intellisense のサポートが提供されます。