2012-03-30 5 views
2

Ich bin ein Neuling in MVC architecture.When ich versuche zu aktualisieren, zeigt es Fehler, Es ist total seltsam, aber die Daten werden aktualisiert.Das in das Wörterbuch übergebene Modellelement ist vom Typ 'ViewModels.SiteModel',

Das Modellelement, das an das Wörterbuch übergeben wurde, ist vom Typ 'CMS.Domain.Models.Site', aber für dieses Wörterbuch ist ein Modellelement vom Typ 'CMS.Web.ViewModels.SiteModel' erforderlich. '.

Beschreibung: Bei der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es aus dem Code stammt.

Ausnahmedetails: System.InvalidOperationException: Das an das Wörterbuch übergebene Modellelement ist vom Typ 'CMS.Web.ViewModels.SiteModel', aber für dieses Wörterbuch ist ein Modellelement vom Typ 'System.Collections.Generic.IEnumerable`1 erforderlich [CMS.Web.ViewModels.SiteModel] '.

Mein Code sieht so aus:

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

    } 
} 

Modell:

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

    } 
} 

Controller:

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

Ich kämpfe um dieses zu lösen, helfen bitte .

Antwort

4

Überprüfen Sie die Modelldeklaration Ihrer View. Es erwartet eine aufzählbare Liste (IEnumerable<CMS.Web.ViewModels.SiteModel>), aber Sie übergeben es eine einzige Instanz CMS.Web.ViewModels.SiteModel

+0

Ich habe nicht wo genau den Code ändern, muss ich es ändern ActionResult Index() View. Der Code in Index.cstml sieht wie folgt aus: 'code' @ model IEnumerable ' code' 'code' @ foreach (var-Element in Model) {}' code' –

+1

Hängt davon ab, was Sie versuchen erreichen. Wenn Ihre Sicht eine aufzählbare Liste von SiteModel anzeigen muss, ändern Sie den Rückgabewert der Aktionsmethode in 'return View (neue Liste () {model});' Wenn Ihre Ansicht ein einzelnes SiteModel anzeigt, ändern Sie die Ansicht (cshtml) Modell Erklärung zu '@model inPowerCMS.Domain.Models.SiteModel' – Keith

+0

habe es, danke. –

Verwandte Themen