2012-06-19 3 views
3

Я начал этот проект с использованием MVC2, но был изменен на dll MVC3.Объект просмотра MVC3 ASPX не содержит определения

У меня есть объект Asset. В контроллере у меня есть детали ActionResult определяется следующим образом:
EDIT: (Put правильного кода контроллера.)

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? Я не получаю ошибки времени разработки, но я получаю ошибки времени выполнения.

+1

Похоже, вы отправляете 'IEnumerable ' и ожидаете увидеть, чтобы получить' Assest' – gdoron

+0

Проверьте правильность написания и убедитесь, что ваша модель действительно содержит свойство Id. –

+0

Да, объект Asset содержит Id. –

ответ

3

Я не уверен, но похоже, что это проблема. Вы передаете список с точки зрения

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

но ваш Inherits говорит Inherits="System.Web.Mvc.ViewPage<CITracker.Models.Asset>" вместо

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

А также, так как ваша модель теперь IEnumerable, вы не можете сделать простой Model.Id вместо это должно быть Model [0] .Id (или то, что когда-либо вы выбираете или вы делаете foreach)

+0

Извините, вставьте неправильный код. Как вы теперь видите, я возвращаю результат Find (id) для деталей. –

+0

Не могли бы вы поставить точку разрыва и посмотреть, что на самом деле является объектом модели на представлении? – Anand

0

Это старый вопрос, но я столкнулся с той же проблемой, конвертирующей некоторый код MVC 2 в MVC 3. A простая проблема с конфигурацией, которую нужно искать, делает sur е у вас есть этот параметр приложения в вашей конфигурации:

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

Посмотреть этот thread для получения дополнительной информации.

Смежные вопросы