2014-10-10 109 views
1

我想寫自定義模型綁定器,但它給錯誤可以任何人告訴我,我在哪裏做錯了?自定義模型與IModelBinder的綁定

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
namespace MvcApplication1.Models 
{ 
public class CustomModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     Ownership own = new Ownership(); 
     own.name = controllerContext.HttpContext.Request.Form["fName"]; 
     own.email = controllerContext.HttpContext.Request.Form["fEmail"]; 
     own.PhoneNo = controllerContext.HttpContext.Request.Form["fPhoneNo"]; 
     own.country = controllerContext.HttpContext.Request.Form["Country"]; 
     own.address = controllerContext.HttpContext.Request.Form["Adres"]; 
     own.office = controllerContext.HttpContext.Request.Form["Off"]; 
     own.officeEmail = controllerContext.HttpContext.Request.Form["OffEmail"]; 
     own.officeNo = controllerContext.HttpContext.Request.Form["OffNo"]; 
     own.OwnershipType = controllerContext.HttpContext.Request.Form["OwnershipType"]; 
     own.ProductId = controllerContext.HttpContext.Request.Form["ProductId"]; 

     return own; 
    } 
} 

} 

錯誤

「 'CustomModelBinder' 不實現接口構件 「System.Web.Mvc.IModelBinder.BindModel(System.Web.Mvc.ControllerContext, System.Web.Mvc。 ModelBindingContext)」

+1

你是否在'ModelBinders.Binders.Add(typeof(Ownership),new CustomModelBinder());'in global.asax?您還需要在控制器中使用'public void MyAction([ModelBinder(typeof(CustomModelBinder))Ownership owner)' – artm 2014-10-10 12:05:52

+0

您可以提供包含命名空間的整個文件嗎? – danyloid 2014-10-10 12:11:31

+0

是的,我將它添加到global.asax文件中,並且在您寫入控制器時也做了同樣的事情。 感謝您的意見@artm – 2014-10-10 12:13:42

回答

5

IModelBinder您使用的是從System.Web.ModelBinding南協商。該接口的BindModel方法返回bool類型的值。

bool BindModel(
    ModelBindingExecutionContext modelBindingExecutionContext, 
    ModelBindingContext bindingContext 
) 

如果你想使用BindModel方法,它返回的對象,那麼你需要從System.Web.Mvc命名空間來實現接口。

Object BindModel(
    ControllerContext controllerContext, 
    ModelBindingContext bindingContext 
) 

您可以通過在實現此IModelBinder接口時提供完整的名稱空間來檢查它。像

+0

這種解決方案不起作用@Asad – Mukund 2014-10-13 05:22:34

+0

我試過了,但它不起作用,它在編譯時會產生相同的錯誤 – 2014-10-16 13:51:38