2012-06-18 3 views
4

강력하게 형식이 지정된 객체가 포함 된 ViewBag를 사용하는 경우 MVC 면도기에서 IntelliSense에 나타나는 모든 요소가 나타나도록 정의하거나 캐스트하는 방법이 있습니까? 예를 들어강력하게 형식화 된 뷰백 항목

는 회원 이름과 길이 I가처럼

class Movie { 
    public string Name {get; set;} 
    public string Length {get; set;} 
} 

는 어떻게 든이 캐스팅 할 수있다 개체 형식의 영화,이다 나는 영화를 알고

ViewBag.Movies.Name 
ViewBag.Movies.Length 

이 있다고 할 수 있습니다 모델

@model Transactions.UserTransactionDetails 

Movie 구성원은 면도기에서 사용할 수있게됩니까?

+1

ViewBag은 강력하게 형식화되지 않으므로 강력하게 형식화 된 모델을 사용해야합니다. –

답변

11

당신이 필요

예를 볼 수있는 모든 다른 개체의 속성을 포함하는 뷰 모델을 사용하여

public class MovieTransactionViewModel 
{ 
    public List<Transaction> Transactions { get; set; } 
    public List<Movie> Movies { get; set; } 
} 

그런 다음,이 모델의이 같은 뷰 사용을 가지고 있고, 당신이보기에 IntelliSense를 얻을 것이다.

그런 식으로 모델을 변경하지 않으므로 EntityFramework가 영향을받지 않습니다.

12

변수에 저장할 수 있습니다.

var movie = (Movie)ViewBag.Movie; 

그런 다음 @movie.를 입력하는 것은 Length, Name에 대한 인텔리를 생성합니다.

1

아니요. 왜냐하면 ViewBag는 강력한 형식이 아니기 때문입니다. 그것은 dynamics와 ExpandoObject를 사용하여 구현됩니다. 강하게 타자를 치는 모형을 필요로하는 경우에, 당신은 1 개를 사용하지 않는가? 멀리 VieWbag에서 ​​

+0

사용자 양식에 대한 트랜잭션 정보를 앞뒤로 전달하기 위해 모델을 이미 사용하고 있으므로 두 모델을 가질 수 있다고 생각하지 않았습니다. ( –

+1

모델에 필요한 데이터를 추가 할 수 없습니까? view 모델? – alexn

+0

일반적으로 ViewModels를 사용하는 것이 좋지만 여러 모델의 엔터티를 사용해야하는 경우 "필수"입니다 –