我是初学者,我想为我的应用程序用控制器做一个viewmodel:
public class catalogue_produit
{
[Key]
public int PdtID { get; set; }
public string PdtCode { get; set; }
public string PdtNomCourt { get; set; }
public string PdtNomLong { get; set; }
public string PdtTexte { get; set; }
public int PdtColisage { get; set; }
public string PdtGencod { get; set; }
public float PdtTva { get; set; }
public float PdtTgap { get; set; }
public string PdtRemplacerPar { get; set; }
public bool PdtActif { get; set; }
public bool PdtPau { get; set; }
[Required]
public int FournisseurID { get; set; }
[ForeignKey("FournisseurID")]
public virtual catalogue_fournisseur catalogue_fournisseur { get; set; }
[Required]
public int FamilleID { get; set; }
[ForeignKey("FamilleID")]
public virtual catalogue_famille catalogue_famille { get; set; }
[Required]
public int CategorieID { get; set; }
[ForeignKey("CategorieID")]
public virtual catalogue_categorie catalogue_categorie { get; set; }
}
//Classe gérant les fiches techniques
public class catalogue_fichetechnique
{
[Key]
public int FtID { get; set; }
[Required]
public int PdtID { get; set; }
[ForeignKey("PdtID")]
public virtual catalogue_produit catalogue_produit { get; set; }
public string FtUrl { get; set; }
public DateTime FtDate { get; set; }
}
所以我做了一个viewmodel:
public class ProduitViewModel
{
public catalogue_produit catalogue_produit { get; set; }
public catalogue_fichetechnique catalogue_fichetechnique { get; set; }
}
我的控制器:
public class ProduitController : Controller
{
//
// GET: /Produit/
public ActionResult Index()
{
ProduitViewModel product = new ProduitViewModel();
return View(product);
}
索引执行时出现错误消息:
L'élément de modèle passé dans le dictionnaire est de type 'WEBPHSMVC.ViewModels.ProduitViewModel', mais ce dictionnaire requiert un élément de modèle de type 'System.Collections.Generic.IEnumerable`1[WEBPHSMVC.ViewModels.ProduitViewModel]'.
Description : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: System.InvalidOperationException: L'élément de modèle passé dans le dictionnaire est de type 'WEBPHSMVC.ViewModels.ProduitViewModel', mais ce dictionnaire requiert un élément de modèle de type 'System.Collections.Generic.IEnumerable`1[WEBPHSMVC.ViewModels.ProduitViewModel]'.
Erreur source:
Une exception non gérée s'est produite lors de l'exécution de la requête Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.
Trace de la pile:
[InvalidOperationException: L'élément de modèle passé dans le dictionnaire est de type 'WEBPHSMVC.ViewModels.ProduitViewModel', mais ce dictionnaire requiert un élément de modèle de type 'System.Collections.Generic.IEnumerable`1[WEBPHSMVC.ViewModels.ProduitViewModel]'.]
System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +509563
System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary) +371
System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData) +48
System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +99
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +295
System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +23
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +242
System.Web.Mvc.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b() +21
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +177
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +324
System.Web.Mvc.Controller.ExecuteCore() +106
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +91
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +34
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +19
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +48
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629296
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
但我不确定,我的控制器不起作用:( 我想在我的ProduitViewModel上使用CRUD。
请帮助我!
答案 0 :(得分:0)
您的ViewModel
包含catalogue_produit
模型本身,这通常不是您想要的。
ViewModel
的一个要点是View
能够在不依赖Models/Entities
的情况下呈现自身,而View
通常不符合{{1}}的需求。
答案 1 :(得分:0)
好吧,只需阅读错误信息即可:
您查看的模型是IEnumerable<ProduitViewModel>
,类似于
@model IEnumerable<ProduitViewModel>
并且您传递了ProduitViewModel
因此要么将视图模型更改为
@model ProduitViewModel
或发送IEnumerable
,而不是单个实例。