2009-07-02 4 views
1

Je reçois le message suivant Erreur L'élément de modèle transmis dans le dictionnaire est de type 'MvcWebApplication.Models.Product' mais ce dictionnaire nécessite un élément de modèle de type 'MvcWebApplication.ViewModels.ProductCommonViewModel'.Modèle liant dans MVC question

code du contrôleur est la suivante: -

public ActionResult Index([Bind(Prefix= "MvcWebApplication.ViewModels.ProductCommonViewModel")] Product product) 
View Model class sent to the View: 
namespace MvcWebApplication.ViewModels 
{ 
    public class ProductCommonViewModel 
    { 
     public Product Product { get; set; } 
    } 
} 

Modèle Binder:

namespace MvcWebApplication.ModelBinders 
{ 
    public class ProductBinder : IModelBinder 
    { 
     #region IModelBinder Members 

     public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      HttpRequestBase fc = controllerContext.HttpContext.Request; 

      Product product = new Product(); 
      LaunchSheet launchSheet = null; ; 
      ProductPricing productPricing = null; 

      product.LoanTypeId = Convert.ToInt32(fc["rblLoanType"]); 
      product.ProductTypeId = Convert.ToInt32(fc["ddlproductType"]); 
etc... 
      return Product; 
      } 
     } 
} 

Classe de produits

[ModelBinder(typeof(ProductBinder))] 
    public partial class Product : IRuleEntity 
    { 

} 

Qu'est-ce que je fais mal?

Répondre

4

Ce n'est pas la reliure qui est cassée. Le problème est que votre vue fortement typée (aspx/ascx) nécessite un modèle de type MvcWebApplication.ViewModels.ProductCommonViewModel, mais l'action qui le rend passe un modèle de type MvcWebApplication.Models.Product. Notez que cela n'a rien à voir avec le code de votre question. le bug est dans la ligne "return View (model)" ailleurs.