2012-03-30 57 views
2

我是MVC架构的新手。当我尝试更新时,它显示错误,它完全奇怪,但数据正在更新。传入字典的模型项目类型是'ViewModels.SiteModel',

传入字典的模型项目类型为'CMS.Domain.Models.Site',但此字典需要一个'CMS.Web.ViewModels.SiteModel'类型的模型项。

描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。

异常详细信息:System.InvalidOperationException:传入字典的模型项目类型为'CMS.Web.ViewModels.SiteModel',但此字典需要类型为“System.Collections.Generic.IEnumerable`1的模型项[CMS.Web.ViewModels.SiteModel]”。

我的代码如下所示:

的ViewModels:

namespace CMS.Web.ViewModels 
{ 
    public class SiteModel 
    { 

     public SiteModel() 
     { 
      SiteStatus = new List<SelectListItem>(); 
     } 

     [Key] 
     public int ID { get; set; } 

     [Required(ErrorMessage = "Site Name is required")] 
     [Display(Name = "Site Name")] 
     public string Title { get; set; } 


     [Display(Name = "Require Login")] 
     public bool RequiresLogin { get; set; } 

     [Display(Name = "Force HTTPS")] 
     public bool ForceHTTPS { get; set; } 

     [Display(Name = "Enable Approval")] 
     public bool Approval { get; set; } 

     [AllowHtml] 
     public IList<SelectListItem> SiteStatus { get; set; } 

     public bool Deleted { get; set; } 

     public string CreatedBy { get; set; } 

     public DateTime CreatedOn 
     { 
      get { return _createdOn; } 
      set { _createdOn = value; } 
     } 
     private DateTime _createdOn = DateTime.Now; 

     public string LastUpdatedBy { get; set; } 

     public DateTime LastUpdatedOn 
     { 
      get { return _lastUpdatedOn; } 
      set { _lastUpdatedOn = value; } 
     } 
     private DateTime _lastUpdatedOn = DateTime.Now; 

     [Display(Name = "Site State")] 
     public string SiteState { get; set; } 

    } 
} 

型号:

namespace CMS.Domain.Models 
{ 
    public partial class Site : Model 
    { 

     public string Title { get; set; } 
     public bool Approval { get; set; } 
     public bool RequiresLogin { get; set; } 
     public bool ForceHTTPS { get; set; } 
     public virtual string SiteStatus { get; set; } 
     public bool Deleted { get; set; } 

    } 
} 

控制器:

public ActionResult Index() 
     { 
      var _sites = _siterepository.FindAll(); 
      return View(_sites); 
     } 

     public ActionResult Add() 
     { 
      var model = new SiteModel(); 
      var _SiteStatus = _siterepository.GetSiteStatus(); 
      foreach (var _sitestatus in _SiteStatus) 
      { 
       model.SiteStatus.Add(new SelectListItem() 
       { 
        Text = _sitestatus.StatusName, 
        Value = _sitestatus.StatusName.ToString() 
       }); 

      } 
      return View(model); 
     } 

     [HttpPost] 
     public ActionResult Add(SiteModel _sitemodel) 
     { 
      var model = _sitemodel.ToEntity(); 
      _siterepository.Add(model); 
      return View(model); 
     } 

     public ActionResult Edit(int id) 
     { 
      var model = new SiteModel(); 
      var Site = _siterepository.Find(id); 
      model = Site.ToModel(); 
      var _SiteStatus = _siterepository.GetSiteStatus(); 

      foreach (var _sitestatus in _SiteStatus) 
      { 
       model.SiteStatus.Add(new SelectListItem() 
       { 
        Text = _sitestatus.StatusName, 
        Value = _sitestatus.StatusName.ToString(), 
        Selected = _sitestatus.StatusName == Site.SiteStatus 
       }); 

      } 

      return View(model); 
     } 

     [HttpPost] 
     public ActionResult Edit(SiteModel _sitemodel) 
     { 
      var model = _sitemodel.ToEntity(); 
      _siterepository.Update(model); 
      return View(model); 
     } 

我竭力要解决这个问题,请大家帮忙。

回答

4

检查您的视图的模型声明。它期望一个列表(IEnumerable<CMS.Web.ViewModels.SiteModel>),但你通过它的单个实例CMS.Web.ViewModels.SiteModel

+0

我没有得到在哪里完全改变代码,我是否需要改变它ActionResult Index()View。 Index.cstml中的代码看起来像'code' @ model IEnumerable 'code'' code' @ foreach(Model in Model){}'code' – 2012-03-30 16:16:24

+1

取决于你在尝试什么去完成。如果您的视图需要显示SiteModel的可列表列表,则将您的操作方法返回值更改为'return View(new List (){model});'如果您的视图显示单个SiteModel,则更改您的视图的(cshtml)模型声明到'@model inPowerCMS.Domain.Models.SiteModel' – Keith 2012-03-30 18:45:32

+0

明白了,谢谢。 – 2012-03-31 09:15:16

相关问题