MVC3 ASPX视图对象不包含定义

时间:2012-06-19 17:48:56

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

我使用MVC2启动了这个项目,但改为MVC3 dll。

我有一个资产实体。在控制器中,我将Details ActionResult定义如下:
编辑:(输入正确的控制器代码。)

    public ActionResult Details(int id)
    {
        using (var db = new AssetsContainer())
        {
            return View(db.Assets.Find(id));
        }
    } 

我的Details.aspx页面是这样定义的:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CITracker.Models.Asset>" %>  
<%@ Import Namespace="CITracker.Models" %>  
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">  
Details  
</asp:Content>  

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Details</h2>

<fieldset>
    <legend>Fields</legend>

    <div class="display-label">Id</div>
    <div class="display-field"><%: Model.Id %></div>

我收到此错误:

CS1061: 'object' does not contain a definition for 'Id' and no extension method 'Id' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

为什么这个与MVC2合作但是MVC3失败了?我没有得到开发时间错误,但我确实遇到了运行时错误。

2 个答案:

答案 0 :(得分:3)

我不确定,但看起来这就是问题所在。您正在将列表传递给视图

return View(db.Assets.ToList()); 

但是你的继承说 Inherits="System.Web.Mvc.ViewPage<CITracker.Models.Asset>"代替

Inherits="System.Web.Mvc.ViewPage<IEnumerable<CITracker.Models.Asset>>"

而且因为你的模型现在是一个IEnumerable,你不能做一个简单的Model.Id而应该是Model [0] .Id(或者你选择的任何东西或你做的foreach)

答案 1 :(得分:0)

这是一个老问题,但我遇到了将一些MVC 2代码转换为MVC 3的同样问题。要查找的简单配置问题是确保在配置中设置了此应用程序:

<appSettings>
    <add key="enableSimpleMembership" value="false" />
</appSettings>

有关详细信息,请参阅此thread

相关问题