2013-07-30 5 views
6

私はasp.net mvc4を初めて使用していますが、私はよく分からないことがあります。mvc4 asp.netでの剃刀ビューでのモデル宣言

コントローラのビューにオブジェクトを渡していると、ビューの上部に@modelを使用してモデルを宣言する必要があるのはなぜですか?

例に取る:

コントローラー:

public ActionResult countryDetails(int id) 
    { 

     Country country = db.Country.Find(id); 
     return View(country); 

    } 

閲覧:

@model MvcApplication2.Models.Country 
@{ 
    ViewBag.Title = "countryDetails"; 
} 
... 

コントローラは、パラメータとしてオブジェクトとの表示を返すので、モデルが既に知らなければなりません。申し訳ありませんが明らかな場合は、私はなぜこれが "二重"宣言ではないのか分かりません。

ありがとうございました!

答えて

1

主な理由は、それはあなたがインテリセンスの利益と強く型付けされたビュー、コンパイラエラーヒント、無効なキャスティングなども

で作業することができ、型の安全性である、もう一つの理由は、読みやすくするためである - それはのように働きコントローラに戻って参照するのではなく、実際に処理しているモデルの種類を思い出させるものです。

6

上部の宣言があなたのための二つのことを行います。

  • それはintellisenceはあなたが@Modelで入力するか、HTMLヘルパー拡張のいずれかを使用する場合、使用しているどのようなタイプを知ることができます。

  • また、渡されたモデルは、ビューが予期している型にキャストできることもチェックされます。

メソッドのパラメータに型を指定するのと同じように、必ずしも "double declaration"とは限りません。あなたのビューがSystem.Web.Mvc.WebViewPage<TModel>

から継承するので

Person Someone = new Person(); 
RenderView(Someone); 
... 
void RenderView(Person model) { } 
+0

お返事ありがとうございます。分かりました :) – Pierrito

2

デフォルトではオプションで、このクラスをオーバーライドすることができますように、それはデフォルトASP.NETの継承メカニズムです:

@inherits System.Web.Mvc.WebViewPage<List<CompanyName.MyProduct.MyCategory>> 

それとも、単にMVC3ので、これを簡素化することができますこのように:

@model List<CompanyName.MyProduct.MyCategory> 

この砂糖構文はコードの型を簡単にするために作られました。 この宣言は、あなたがあなたのオブジェクトのメソッドとプロパティ に にアクセスすることを可能にするタイプの定義「モデル」プロパティを受け取り、あなたに有利なタイプ

    1. ビューに自動的にキャストオブジェクトをいくつかのことを与えます

      これは、オブジェクトを受け取り、指定したタイプにキャストするメソッドであると考えてください。

  • 関連する問題