3

MVC2 を使用してこのプロジェクトを開始しましたが、MVC3 dll に変更しました。

Asset エンティティがあります。コントローラーでは、次のように定義された 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 で失敗した理由はありますか? 開発時エラーは発生しませんが、実行時エラーは発生します。

4

2 に答える 2

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 を実行したもの) にする必要があります。

于 2012-06-19T17:56:26.697 に答える
0

これは古い質問ですが、いくつかの MVC 2 コードを MVC 3 に変換するときに同じ問題に遭遇しました。探すべき簡単な構成の問題は、構成にこのアプリ設定があることを確認することです。

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

詳細については、このスレッドを参照してください。

于 2013-10-16T17:18:36.783 に答える