2012-01-03 6 views
0

내 모델에서 내 모델에 액세스하는 방법을 알아낼 수 없습니다. 나는 혼란 스럽다.내보기에서 내 모델에 액세스하는 방법?

여기 내 홈 컨트롤러입니다. 내가 "표본"에 접근 할 수있을 것입니다 가정

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

<% foreach (WildlifeTropical.Models.specimen s in ??????) 
    { %> 
    <div>s.Name</div> 
<% } %> 

:

public class HomeController : Controller 
{ 
    wildtropEntities wildlifeDB = new wildtropEntities(); 

    public ActionResult Index() 
    { 
     ViewData["CurrentDate"] = System.DateTime.Now.ToString("MM/dd/yyyy"); 

     var specimens = from s in wildlifeDB.specimen1 
         select s; 

     return View(specimens); 
    } 

} 

그리고 여기 내보기에서 몇 조각이다 : 나는 "표본"데이터베이스에서 데이터로 채워되고 있음을 확인했습니다 컨트롤러에서 View로 전달 했으므로 (보기 (표본) 반환) ... 작동하지 않습니다.

답변

3
당신은 당신이 당신의 컨트롤러 액션 ( IEnumerable<specimen>)에서에 전달하는 것입니다있는보기가 강하게 specimen의 컬렉션에 입력해야 할 것이다

:

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<WildlifeTropical.Models.specimen>>" %> 

<% foreach (WildlifeTropical.Models.specimen s Model) { %> 
    <div><%= Html.Encode(s.Name) %></div> 
<% } %> 

공지 사항이보기 System.Web.Mvc.ViewPage<IEnumerable<WildlifeTropical.Models.specimen>>을 상속하는 방법 이제는 루프 할 수있는 specimens 컬렉션에 강력하게 입력됩니다.

개인적으로 나는 내 의견에 foreach 루프를 작성하는 것을 좋아하지 않습니다. 그들은 그 (것)들을 추악하게 본. 이 경우 I는 디스플레이 템플릿을 사용한다 :

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<WildlifeTropical.Models.specimen>>" %> 
<%= Html.DisplayForModel() %> 

을 한 후 나는 자동으로 모델 콜렉션의 각 요소에 대해 렌더링되는 디스플레이 템플릿 (~/Views/Shared/DisplayTemplates/specimen.ascx)를 정의합니다 :

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<WildlifeTropical.Models.specimen>" %> 
<div> 
    <%= Html.DisplayFor(x => x.Name) %> 
</div> 

방법 참조 specimen.ascx 사용자 컨트롤은 이제 강력하게 System.Web.Mvc.ViewUserControl<WildlifeTropical.Models.specimen>으로 입력됩니다. 이것은 주 뷰 모델의 각 견본에 대해 렌더링되기 때문입니다.

+0

대단히 감사합니다. 나는 당신이 제공 한 코드의 첫 번째 블럭을 구현하려고 시도했다. (첫 부분이 작동 한 후 다음 부분으로 넘어갈 것이라고 생각했다.) 내가 디버깅 할 때, 나는 표시되는 이름의리스트로 끝나지 않는다. 대신 문자 그대로 s.Name, s.Name 등을 얻는다. 무엇이 잘못 될 수 있는가? 미리 감사드립니다. – user1125648

+0

@ user1125648 예, 대답은 오타가 있었기 때문입니다. '

<%= Html.Encode(s.Name) %>
'을 사용해야합니다. 이 문제를 해결하기 위해 내 대답을 업데이트했습니다. –

+0

나는 그것을 알아 냈다 ... 나는 실종되었다 <%= %> 태그. 지금 날 쏴. – user1125648

0

MVC2에 대해 확실하지 않습니다. Razor View Engine이있는 MVC 3에서 Model/ViewModel을 View에 전달할 수 있습니다.

@model MyProject.ViewModel.UserViewModel 
@{ 
    ViewBag.Title = "Welcome To My Site"; 
} 
<div class="divSubHead"> 
<h2>Hello @Model.FirstName</h2></div> 
0

어때? 페이지 상속을 참고하십시오.

<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of IEnumerable(Of Specimen))" %> 

<% foreach (WildlifeTropical.Models.specimen s in Model) 
    { %> 
    <div>s.Name</div> 
<% } %> 
관련 문제