我正在尝试运行我的第一个ASP.NET MVC应用程序。我创建了一个cotroller和视图。数据来自数据库。但是,当项目可以运行但是当我尝试浏览客户页面时,我会收到以下错误。
传递到字典中的模型项是类型的 'System.Collections.Generic.List`1 [MvcApplication3.Models.Customer]', 但是这个字典需要一个类型的模型项 'MvcApplication3.Models.Customer'。
我在这里有点困惑,因为错误说它已经请求了模型类型。
堆栈跟踪
堆栈追踪:
[InvalidOperationException:传递到字典中的模型项 是类型的 'System.Collections.Generic.List
1[MvcApplication3.Models.Customer]', but this dictionary requires a model item of type 'MvcApplication3.Models.Customer'.]
1.SetModel(Object value)+585211
System.Web.Mvc.ViewDataDictionary
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
1续)+242
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
System.Web.Mvc&LT;&GT; C_ DisplayClass1c.b _19() +21 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList1 filters, ActionResult actionResult) +177
1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult) asyncResult)+43
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
System.Web.Mvc&LT;&GT; C_ DisplayClass1d.b _18(IAsyncResult的 asyncResult)+14
System.Web.Mvc.Async&LT;&GT; C_ DisplayClass4.b _3(IAsyncResult的 ar)+23 System.Web.Mvc.Async.WrappedAsyncResult1.End() +62
1.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
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+47
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult的 asyncResult)+10
System.Web.Mvc&LT;&GT; C_ DisplayClass8.b _3(IAsyncResult的 asyncResult)+25
System.Web.Mvc.Async&LT;&GT; 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) 结果)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9514812 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; 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>
有人可以给我一些解决方法吗?
答案 0 :(得分:7)
您正在尝试将集合传递给专为单个对象设计的视图。
将您的观点声明更改为
Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication3.Models.Customer>>
答案 1 :(得分:3)
究竟让你感到困惑的是什么?在您的aspx文件中,您已将模型定义为客户,但您将列表传递给它。
预期模型:
System.Web.Mvc.ViewPage<MvcApplication3.Models.Customer>
您的数据:
return View(nwd.Customers.ToList());
显然是不匹配。
答案 2 :(得分:1)
在相关视图(即.cshtml
文件)中查找@model
声明:ActionResult
需要返回模型类的正确实例,例如如果你已经定义了
@model Customer
然后你的ActionResult必须是Customer
类型。
您想要返回一个列表,因此您需要定义
@model IEnumerable<Customer>
在视图中。
答案 3 :(得分:0)
传递到字典中的模型项的类型为
System.Collections.Generic.List1[MvcApplication3.Models.Customer]
但是这个字典需要一个
类型的模型项MvcApplication3.Models.Customer
类型不匹配。
答案 4 :(得分:0)
我遇到了这个问题,这是视图模型的问题。我在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