gpt4 book ai didi

c# - 派生属性上的自定义模型绑定(bind)不起作用

转载 作者:行者123 更新时间:2023-11-30 20:07:44 25 4
gpt4 key购买 nike

我有一个自定义的 ModelBinder (MVC3),由于某种原因没有被解雇。以下是相关的代码片段:

查看

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

编辑器模板

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

模型绑定(bind)器

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());
...
}

信息模型

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

车辆模型

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

卡车模型

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

Controller

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

为什么我的自定义 ModelBinder 没有触发?

最佳答案

您必须将模型绑定(bind)器与基类相关联:

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

您的 POST 操作采用一个 InfoModel 参数,该参数本身具有 VehicleModel 类型的 Vehicle 属性。因此 MVC 在绑定(bind)过程中不知道 TruckModel。

你可以看看 following post实现多态模型绑定(bind)器的示例。

关于c# - 派生属性上的自定义模型绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8085541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com