我有以下控制器操作:
[HttpPost]
public ViewResult DoSomething(MyModel model)
{
// do something
return View();
}
Where MyModel
看起来像这样:
public class MyModel
{
public string PropertyA {get; set;}
public IList<int> PropertyB {get; set;}
}
所以 DefaultModelBinder 应该毫无问题地绑定它。唯一的事情是我想使用特殊/自定义活页夹进行装订PropertyB
我也想重复使用这个活页夹。所以我认为解决方案是在 PropertyB 之前放置一个 ModelBinder 属性,这当然不起作用(属性上不允许使用 ModelBinder 属性)。我看到两个解决方案:
-
要在每个属性而不是整个模型上使用操作参数(我不喜欢这样做,因为模型有很多属性),如下所示:
public ViewResult DoSomething(string propertyA, [ModelBinder(typeof(MyModelBinder))] propertyB)
要创建一个新类型,可以说MyCustomType: List<int>
并为此类型注册模型绑定器(这是一个选项)
也许要为 MyModel 创建活页夹,覆盖BindProperty
如果该财产是"PropertyB"
使用我的自定义活页夹绑定该属性。这可能吗?
还有其他解决办法吗?
覆盖 BindProperty 并且如果
属性是“PropertyB”绑定
带有我的自定义活页夹的财产
这是一个很好的解决方案,不过您最好检查自己定义属性级绑定的自定义属性,而不是检查“is PropertyB”,例如
[PropertyBinder(typeof(PropertyBBinder))]
public IList<int> PropertyB {get; set;}
您可以查看 BindProperty 覆盖的示例here https://stackoverflow.com/questions/970335/asp-net-mvc-mixing-custom-and-default-model-binding.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)