我是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);
}
我竭力要解決這個問題,請大家幫忙。
我沒有得到在哪裏完全改變代碼,我是否需要改變它ActionResult Index()View。 Index.cstml中的代碼看起來像'code' @ model IEnumerable'code'' code' @ foreach(Model in Model){}'code' –
2012-03-30 16:16:24
取決於你在嘗試什麼去完成。如果您的視圖需要顯示SiteModel的可列表列表,則將您的操作方法返回值更改爲'return View(new List(){model});'如果您的視圖顯示單個SiteModel,則更改您的視圖的(cshtml)模型聲明到'@model inPowerCMS.Domain.Models.SiteModel' –
Keith
2012-03-30 18:45:32
明白了,謝謝。 – 2012-03-31 09:15:16