2013-02-26 5 views
1

방금 ​​MVC3을 배우기 시작했습니다. 기존의 ASP.NET에서 코딩 해왔다. 잠시 동안 MVC로 옮기고 싶습니다.MVC3 면도기 뷰 엔진

(아마 기존의 ASP.NET에서 다르게 한 후 사용) 내가 이해하지 못하는 어떤 것들은

내가 뉴스를 표시하고 그들을 위해 메모를 삽입 할 수있는 간단한 뉴스 모듈을 작성하려고 해요 .

그래서 첫 번째 단계는 내가 내 SQL 서버의 테이블을 생성한다 : TblNews TblCategories TblComments

만든 Linq2SQL 데이터 모델 폴더에 클래스과 News.dbml 만든 컨트롤러 HomeController.cs 및 방법이라는 그 안에 Index()라고 불린다. 이 같은 봐 :

public ActionResult Index() 
     { 
      Models.NewsDataContext db = new Models.NewsDataContext(); 
      var Model = (from n in db.TblNews 
         select new 
         { 
          ID = n.ID, 
          Title = n.Title, 
          Description = n.Description, 
          Category = n.TblCategory.CategoryName 
         }); 

      return View(Model); 
     } 

당신은 내가 데이터를 반환하고있어 내가 모든 뉴스와 그 범주 이름 (TblNews 및 TblCategories이 그들 사이의 관계를 가지고 할) 그 후

을 선택하기 위해 노력하고있어시피 내가 그 질문에서 얻은 것. 보기에서

는 내가 가지고 테이블에서 내 샘플 데이터의

ID: 4 
Title: asd 
Description: asd 
Category: 2 

: 뭔가를 반환해야합니다

@{ 
    ViewBag.Title = "News Index Page"; 
} 

<table> 
    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       ID: @item.ID<br /> 
       Title: @item.Title<br /> 
       Description: @item.Description<br /> 
       Category: @item.Category 
      </td> 
     </tr> 
    } 
</table> 

.

내가 페이지를 실행하면 그것은 나에게 오류 메시지를 제공합니다

'object' does not contain a definition for 'ID' 

을하지만 난 "항목"내 마우스를 집중할 때 변수는 실제로 포함되어

{ ID = 4, Title = asd, Description = asd, Category = Test2 } 

가 나는 또한 Linq에를 반환하는 시도 .ToList()를 끝에 추가하여 목록으로 쿼리하십시오.

아무도 내게 어떤 힌트를 주거나 올바른 방향으로 나를 데려 갈 수 있습니까?

내가 잘못 설명하면 죄송합니다. 영어가 제 기본 언어가 아닙니다. 자세한 정보가 필요한지 물어보십시오.

대단히 감사합니다.

P. Visual Studio 2012를 사용 중입니다.

답변

0

보기 상단에 모델 선언이 누락되어 있으므로 기본값은 object입니다.또한,

@model List<Models.NewsDataContext> 

당신은 LINQ 쿼리을 평가 있는지 확인하십시오 당신이 item.ID을 수행 할 때 당신은 object는 다음을 추가 ID

에 대한 정의를 포함하지 않는 것을 불평 이유는, object.ID하고있어 반환 모델 전에 .ToList()을 호출하여 뷰에 도달하기 전에 쿼리가 데이터베이스에 대해 이미 실행 된 것입니다.

return View(Model.ToList()); 

편집 : 실제로 LINQ 쿼리에서 익명 형식 인 을 선택하면보기에이를 사용하기 위해 구체적인 클래스를 사용해야합니다.

var Model = (from n in db.TblNews 
        select new News //class name here 
        { 
         ID = n.ID, 
         Title = n.Title, 
         Description = n.Description, 
         Category = n.TblCategory.CategoryName 
        }); 

     return View(Model.ToList()); 

그런 다음에 모델을 변경 : 아래는 당신의 TblNewsNews라는 클래스에 해당하는 가정

@model List<News> 
+0

@ user2110925 아 당신은 당신의 LINQ 문에 TblNews' 클래스'의로 선택해야합니다 'select new TblNews' (또는 그 클래스가 호출되는 클래스)로 변경 한 다음 모델을 List (또는 클래스가 호출되는 클래스)으로 변경하십시오 – mattytommo

+0

클래스에 대해이 부분을 이해하지 못합니다. 에 해당. o_O 어떻게 알 수 있습니까? 내 테이블 이름은 TblNews이지만 그 클래스에 대해서는 실제로 이해하지 못합니다. 전통적인 ASP.NET에서 나는 테이블 형식을 사용할 필요가 없었습니다. 단지 드롭 다운 목록이나 그와 비슷한 것을 채울 때만 사용해야했습니다. 이제는 정말로 혼란 스럽네요. : –

+0

@ user2110925 당신의 클래스는'TblNews'라고 생각합니다. 기본적으로'NewsDataContext'에는'DbSet '이있을 것입니다. 'TblNews' 클래스. 이것은 MVC에만 국한되지 않으며 엔티티 프레임 워크, linq to sql, nhibernate 등과 같은 ORM을 사용하는 경우에만 사용됩니다. – mattytommo