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

Viewのモデル宣言を確認してください。列挙可能なリスト(IEnumerable<CMS.Web.ViewModels.SiteModel>)を期待していますが、CMS.Web.ViewModels.SiteModel

+0

のインスタンスが1つだけ渡されています。コードを正確に変更する場所がわからないため、ActionResult Index()ビューを変更する必要があります。 Index.cstmlのコードは 'code'と似ています。@ model IEnumerable ' code' 'code' @ foreach(モデル内のvar item){}' code' –

+1

あなたが試みていることに依存します達成するために。ビューにSiteModelの列挙可能なリストを表示する必要がある場合は、アクションメソッドの戻り値を 'return View(新しいリスト(){model});に変更してください。ビューに単一のSiteModelが表示されている場合は、 @model inPowerCMS.Domain.Models.SiteModel' – Keith

+0

にモデル宣言しました。ありがとうございます。 –

関連する問題