2013-07-30 3 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 헬퍼 확장 중 하나를 사용할 때 사용하는 유형을 알 수 있습니다.

  • 또한 런타임에 전달 된 모델을 뷰가 예상하는 유형으로 변환 할 수 있는지 확인합니다.

메서드의 매개 변수에 형식을 지정하는 것과 유사하므로 반드시 두 번 선언하지 않아도됩니다. 보기 당신은 선택적으로이 클래스를 재정의 할 수 있습니다 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. 보기가 자동으로 선호하는 유형의 객체를 던져 몇 가지 제공

      그냥이게 객체를 받아들이고 그것을 당신이 제공 한 특정 타입으로 던지는 방법이라고 생각하십시오.