如何从我的视图访问我的模型?

时间:2012-01-03 15:27:09

标签: asp.net-mvc-2

我似乎无法弄清楚如何从我的视图访问我的模型。我很困惑。

这是我的家庭控制器。我已经确认“标本”正在填充数据库中的数据:

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

我以为我能够访问“标本”,因为我将它从控制器传递给视图(即返回视图(标本))......但它无效。

3 个答案:

答案 0 :(得分: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>。这是因为它将针对主视图模型的每个样本进行渲染。

答案 1 :(得分:0)

我不确定MVC2。在MVC 3(使用Razor View Engine)中,我可以将Model / ViewModel传递给View。

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

答案 2 :(得分: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>
 <% } %>