2009-07-02 13 views
1

次のエラーが発生しました 辞書に渡されるモデルアイテムは 'MvcWebApplication.Models.Product'タイプですが、この辞書には 'MvcWebApplication.ViewModels.ProductCommonViewModel'タイプのモデルアイテムが必要です。次のようにMVC質問のモデルバインダー

コントローラコードは次のとおりです。 -

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

モデルバインダー:

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

製品のクラス

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

} 

私が間違って何をしているのですか?

答えて

4

これは壊れているバインディングではありません。問題は、厳密に型指定されたビュー(aspx/ascx)ではMvcWebApplication.ViewModels.ProductCommonViewModel型のモデルが必要ですが、レンダリングするアクションはMvcWebApplication.Models.Product型のモデルを渡すことです。これはあなたの質問のコードとは関係がないことに注意してください。そのバグは、他の場所の「ビュー(モデル)の戻り値」行にあります。