Элемент модели, передаваемый в словарь, имеет тип 'ViewModels.SiteModel', - PullRequest
2 голосов
/ 30 марта 2012

Я новичок в архитектуре MVC. Когда я пытаюсь обновить, показывается ошибка. Совершенно странно, но данные обновляются.

Элемент модели, передаваемый в словарь, имеет тип 'CMS.Domain.Models.Site', но для этого словаря требуется элемент модели типа 'CMS.Web.ViewModels.SiteModel'. '.

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: 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);
        }

Я пытаюсь решить эту проблему, пожалуйста, помогите.

1 Ответ

4 голосов
/ 30 марта 2012

Проверьте декларацию модели вашего View. Ожидается перечислимый список (IEnumerable<CMS.Web.ViewModels.SiteModel>), но вы передаете ему один экземпляр CMS.Web.ViewModels.SiteModel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...