簡體   English   中英

派生屬性上的自定義模型綁定不起作用

[英]Custom model binding on derived property not working

我有一個自定義的ModelBinder(MVC3),由於某種原因而沒有被解雇。 以下是相關的代碼段:

視圖

@model WebApp.Models.InfoModel
@using Html.BeginForm()
{
    @Html.EditorFor(m => m.Truck)
}

EditorTemplate

@model WebApp.Models.TruckModel
@Html.EditorFor(m => m.CabSize)

ModelBinder的

public class TruckModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        throw new NotImplementedException();
    }
}

Global.asax中

protected void Application_Start()
{
    ...
    ModelBinders.Binders.Add(typeof(TruckModel), new TruckModelBinder());
    ...
}

InfoModel

public class InfoModel
{
    public VehicleModel Vehicle { get; set; }
}

VehicleModel

public class VehicleModel
{
    public string Color { get; set; }
    public int NumberOfWheels { get; set; }
}

TruckModel

public class TruckModel : VehicleModel
{
    public int CabSize { get; set; }
}

調節器

public ActionResult Index(InfoModel model)
{
    // model.Vehicle is *not* of type TruckModel!
}

為什么我的自定義ModelBinder不觸發?

您將不得不將模型綁定程序與基類相關聯:

ModelBinders.Binders.Add(typeof(VehicleModel), new TruckModelBinder());

您的POST操作采用一個InfoModel參數,該參數本身具有VehicleModel類型的Vehicle屬性。 因此,MVC在綁定過程中不了解TruckModel。

您可以看一下以下實現多態模型聯編程序示例的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM