2012-03-30 26 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

相關問題