私は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);
}
私はこの問題を解決するために苦労しています、助けてください。
のインスタンスが1つだけ渡されています。コードを正確に変更する場所がわからないため、ActionResult Index()ビューを変更する必要があります。 Index.cstmlのコードは 'code'と似ています。@ model IEnumerable' code' 'code' @ foreach(モデル内のvar item){}' code' –
あなたが試みていることに依存します達成するために。ビューにSiteModelの列挙可能なリストを表示する必要がある場合は、アクションメソッドの戻り値を 'return View(新しいリスト(){model});に変更してください。ビューに単一のSiteModelが表示されている場合は、 @model inPowerCMS.Domain.Models.SiteModel' –
Keith
にモデル宣言しました。ありがとうございます。 –