2014-02-12 2 views
3

Я пишу код, который будет создавать объект клиент и отображать егоSystem.InvalidOperationException: Модель элемент передается в словарь типа

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 + Клиент», но для этого словаря требуется элемент модели типа «WebApplication4.Models.Class1».


нормально, я так теперь говорят только общественный класс Customer вынул укрытый класс под Class1.cs,

.

и я также изменил пространство имен WebApplication4.Models

к пространству имен WebApplication4.Controller под DefaultController1.cs,

, но когда я иду под Index.cshtml, он говорит

типа или пространства имен Class1 не существует в пространстве имен WebApplication4.Models

ответ

3

Ваш контроллер создает экземпляр объекта типа Class1.Customer(), переданного в бритву View, тогда как вашему представлению сказали t o ожидать модель типа Class1.

У вас есть вложенный класс - я не уверен, что это намеренно?

Если это, изменить вид на:

@model WebApplication4.Models.Class1.Customer 

Edit
Я компиляции и запуска этого:

Модель (/Models/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> 
+0

@ user2439070 Я компиляции и запуска выше. Обратите внимание на синтаксис '@' бритвы против синтаксиса '<% =' веб-форм. – StuartLC

+0

ok Я внес эти изменения, но он все еще не распознает клиента как модель на линии @model WebApplication4.Models.Customer под видом – user2439070

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

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