【问题标题】:The model item passed into the dictionary is of type 'ViewModels.SiteModel',传入字典的模型项的类型为“ViewModels.SiteModel”,
【发布时间】:2012-07-02 08:04:11
【问题描述】:

我是 MVC 架构的新手。当我尝试更新时,它显示错误,完全奇怪但数据正在更新。

传入字典的模型项是“CMS.Domain.Models.Site”类型的,但该字典需要一个“CMS.Web.ViewModels.SiteModel”类型的模型项。 .

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

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

我的代码如下:

视图模型:

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);
        }

我正在努力解决这个问题,请帮忙。

【问题讨论】:

    标签: asp.net-mvc entity-framework-4 razor


    【解决方案1】:

    检查您的视图的模型声明。它需要一个可枚举的列表 (IEnumerable&lt;CMS.Web.ViewModels.SiteModel&gt;),但您传递给它的是 CMS.Web.ViewModels.SiteModel 的单个实例

    【讨论】:

    • 我没有找到具体在哪里更改代码,是否需要更改它的 ActionResult Index() 视图。 Index.cstml 中的代码类似于 code@model IEnumerablecode code@foreach (var item in Model) { }code
    • 取决于您要完成的工作。如果您的视图需要显示 SiteModel 的可枚举列表,则将您的操作方法返回值更改为 return View(new List&lt;SiteModel&gt;() {model}); 如果您的视图显示单个 SiteModel,请将您的视图 (cshtml) 模型声明更改为 @model inPowerCMS.Domain.Models.SiteModel
    猜你喜欢
    • 2019-06-01
    • 2021-10-01
    • 2011-02-14
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多