2012-01-03 54 views
0

我似乎無法弄清楚如何從我的視圖訪問我的模型。我很困惑。如何從我的視圖訪問我的模型?

這是我的家庭控制器。我已經驗證了「標本」被填充了數據庫中的數據:

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); 
    } 

} 

這裏是從我的瀏覽幾個片段:

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

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

我認爲我將能夠訪問「標本」因爲我將它傳遞給Controller的View(即,返回View(標本))...但它不起作用。

回答

3

你必須讓你的觀點強類型到specimen集合這是你逝去的東西從你的控制器動作(IEnumerable<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循環。他們讓他們看起來很醜。在這種情況下,我會用一個顯示模板:

<%@ 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 2012-01-03 16:42:48

+0

@ user1125648,是的,那是因爲我在答案中輸入了錯字。你應該使用:'

<%= Html.Encode(s.Name) %>
'。我已經更新了我的答案來解決這個問題。 – 2012-01-03 16:45:06

+0

我想通了...我失蹤<%= %>標籤。現在開槍射擊。 – user1125648 2012-01-03 16:49:38

0

我不確定MVC2。在MVC 3中(使用Razor View Engine),我可以像這樣將Model/ViewModel傳遞給視圖。

@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> 
<% } %>