web-dev-qa-db-ja.com

ディクショナリに渡されたモデルアイテムのタイプはエラーですか?

最初のASP.NET MVCアプリケーションを実行しようとしています。コントローラーとビューを作成しました。データはデータベースから取得されます。ただし、プロジェクトを実行できるが、顧客ページに移動しようとすると、次のエラーが発生します。

ディクショナリに渡されるモデルアイテムのタイプは「System.Collections.Generic.List`1 [MvcApplication3.Models.Customer]」ですが、このディクショナリには「MvcApplication3.Models.Customer」タイプのモデルアイテムが必要です。

エラーがモデルの種類を要求していると言っているので、ここでは少し混乱しています。

スタックトレースは

スタックトレース:

[InvalidOperationException:ディクショナリに渡されるモデルアイテムのタイプは 'System.Collections.Generic.List1[MvcApplication3.Models.Customer]', but this dictionary requires a model item of type 'MvcApplication3.Models.Customer'.]
System.Web.Mvc.ViewDataDictionary
1.SetModel(オブジェクト値)+585211
System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary)+371 System.Web.Mvc.ViewPage1.SetViewData(ViewDataDictionary viewData) +48 System.Web.Mvc.WebFormView.RenderViewPage(ViewContext context, ViewPage page) +73
System.Web.Mvc.WebFormView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +38
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +295 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
1継続)+242
System.Web.Mvc。<> c _DisplayClass1c.b _ 19()+21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext、IList1 filters, ActionResult actionResult) +177
System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +89 System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102 System.Web.Mvc.Async.WrappedAsyncResult
1.End()+57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)+43
System.Web.Mvc。<> c _DisplayClass1d.b _ 18(IAsyncResult asyncResult)+14
System.Web.Mvc.Async。<> c _DisplayClass4.b _ 3(IAsyncResult ar)+23 System.Web.Mvc.Async.WrappedAsyncResult1.End() +62
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult
1.End()+62
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+47
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)+10
System.Web.Mvc。<> c _DisplayClass8.b _ 3(IAsyncResult asyncResult)+25
System.Web.Mvc.Async。<> c _DisplayClass4.b _ 3(IAsyncResult ar)+23 System.Web.Mvc.Async.WrappedAsyncResult`1.End()+62
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+47 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+9514812 System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+155

ここに私のコントローラーコードがあります。

namespace MvcApplication3.Controllers
{
    public class CustomerController : Controller
    {
        //
        // GET: /Customer/

        public ActionResult Index()
        {
            Models.NorthwindDataContext nwd = new Models.NorthwindDataContext();
            return View(nwd.Customers.ToList());
        }

    }
}

ここにビューがあります

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

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>

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

<h2>Index</h2>

</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="FeaturedContent" runat="server">
</asp:Content>

<asp:Content ID="Content4" ContentPlaceHolderID="ScriptsSection" runat="server">
</asp:Content>

誰かがそれを修正するためのヒントをくれますか?

14
newday

単一のオブジェクト用に設計されたビューにコレクションを渡そうとしています。

ビュー宣言を変更します

Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication3.Models.Customer>>

7
D Stanley

あなたを正確に混乱させるものは何ですか? aspxファイルでは、モデルを顧客として定義していますが、代わりにリストを渡します。

期待されるモデル:

System.Web.Mvc.ViewPage<MvcApplication3.Models.Customer>

あなたのデータ:

return View(nwd.Customers.ToList());

明らかに不一致。

3
walther

関連ビュー(つまり、.cshtmlファイル)@model宣言:ActionResultは、モデルクラスの正しいインスタンスを返す必要があります。定義した場合

@model Customer

actionResultはCustomerタイプである必要があります。リストを返したいので、定義する必要があります

@model IEnumerable<Customer>

ビューで。

1
Matt

ディクショナリに渡されるモデルアイテムのタイプは

System.Collections.Generic。List1 [MvcApplication3.Models.Customer]

しかし、この辞書にはタイプのモデル項目が必要です

MvcApplication3.Models。顧客

型の不一致。

0
Matt Webber

私はこの問題を抱えていましたが、それはビューのモデルの問題でした。私のMVCプロジェクトにこのコードがありました:

var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Author, AuthorViewModel>();
        });

        IMapper mapper = config.CreateMapper();
        var dest = mapper.Map<Author, AuthorViewModel>(author);

        return View("Form", dest);

しかし、View Form.cshtmlのモデルは間違っていました。

@model ORMVC.Models.Author

だから私はそれを次のように変更しました:

@model ORMVC.ViewModels.AuthorViewModel
0
nahuelmisc