System.InvalidOperationException:传递到字典中的模型项是类型

时间:2014-02-12 19:01:38

标签: c# asp.net-mvc model-view-controller

我正在编写一个代码,用于创建对象客户并显示它

Class1.cs是我正在使用的模型:

using System;                       
using System.Collections.Generic;                       
using System.Linq;                      
using System.Web;                       

namespace WebApplication4.Models                        
{                       
    public class Class1                     
    {                       
        public class Customer                       
        {                       
            public int Id { set; get; }                     
            public string CustomerCode { set; get; }                        
            public double Amount { set; get; }                      


        }                       

    }                       
}                       
在Default1Controller下的

我有:

using System;           
using System.Collections.Generic;           
using System.Linq;          
using System.Web;           
using System.Web.Mvc;           


using WebApplication4.Models ;          


namespace WebApplication4.Models            
{           
    public class Default1Controller : Controller            
    {           
        //          
        // GET: /Default1/          
        public ActionResult Index()         

        {           
            Class1.Customer ob = new Class1.Customer();         

            ob.Id = 1001;           
            ob.CustomerCode = "C001";           
            ob.Amount = 900.23;         
            return View(ob);            
        }           
    }       
}       

我右键单击了ActionResult并添加了一个包含以下代码的视图:

@model WebApplication4.Models.Class1

@{
    ViewBag.Title = "Index";
}

    <html>


    <head>
        <title>Title of the document</title>
    </head>

        <body>

            <div> 
                 The customer id is: <% = | Model.Id %>  < br/>
                 The customer Code  is: <% = | Model.CustomerCode  %>  < br/>
                 The customer Amount is: <% = | Model.Id %>  < br/>

            </div>
</body>

</html>

当我运行代码时,我得到了:

  

异常详细信息:System.InvalidOperationException:传递到字典中的模型项的类型为“WebApplication4.Models.Class1 + Customer”,但此字典需要“WebApplication4.Models.Class1”类型的模型项。


好吧,我在Class1.cs下取出了嵌套类,

所以现在它只说公共类客户。

我还更改了名称空间WebApplication4.Models

命名为DefaultController1.cs下的WebApplication4.Controller,

但是当我使用Index.cshtml时,它会说

类型或命名空间Class1在名称空间WebApplication4.Models

中不存在

1 个答案:

答案 0 :(得分:3)

您的控制器正在实例化传递给剃刀View的Class1.Customer()类型的对象,而您的View已被告知期望类型为Class1的模型。

你有一个嵌套类 - 我不确定这是否是故意的?

如果是,请将视图更改为:

@model WebApplication4.Models.Class1.Customer

修改
我编译并运行了这个:

模型(/ Model / Customer.cs)

namespace WebApplication4.Models
{
    public class Customer
    {
        public int Id { set; get; }
        public string CustomerCode { set; get; }
        public double Amount { set; get; }
    }
}

控制器(/Controllers/Default1Controller.cs)

using System.Web.Mvc;
using WebApplication4.Models;

namespace WebApplication4.Controllers
{
    public class Default1Controller : Controller
    {
        public ActionResult Index()
        {
            var ob = new Customer
            {
                Id = 1001, 
                CustomerCode = "C001", 
                Amount = 900.23
            };

            return View(ob);
        }
    }
}

查看/Views/Default1/Index.cshtml) 注意剃须刀使用@Model...而非<%= Model....%>类似网络表单。

@model WebApplication4.Models.Customer

@{
    ViewBag.Title = "Index";
}

<html>
<head>
    <title>Title of the document</title>
</head>
<body>
    <div>
        The customer id is: @Model.Id  < br/>
        The customer Code  is: @Model.CustomerCode  < br/>
        The customer Amount is: @Model.Amount < br/>
    </div>
</body>
</html>

MyApp/Default1/Index

生成以下页面
<html>
<head>
    <title>Title of the document</title>
</head>
<body>
    <div>
        The customer id is: 1001  < br/>
        The customer Code  is: C001  < br/>
        The customer Amount is: 900.23 < br/>
    </div>
</body>
</html>