gpt4 book ai didi

C#MVC : When to use a specific (non-default) ModelBinder?

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:00 25 4
gpt4 key购买 nike

据我了解,默认模型 Binder 能够转动



<input type="text"name="myType.property1"value="李四"/>
<input type="text"name="myType.property2"value="22"/>

进入:



[AcceptVerbs(HttpVerbs.Post)]
公共(public) ActionResult SomeAction(MyType myType)
{
//这将是“John Doe”
String someName = myType.property1;
//这将是 22
Int32 someNumber = myType.property2;


//
//无关魔法
}

在什么情况下我会使用非默认模型 Binder ?我想不出有什么理由不以与类属性名称不同的方式命名 HTML 输入。请举例说明。

谢谢!

最佳答案

例如,在您的 MyType 没有默认构造函数的情况下(默认模型绑定(bind)器需要一个默认构造函数)。
如果您使用工厂方法模式创建新对象,就会发生这种情况(非常简单的示例仅用于说明;-):

public class MyType
{
private MyType() // prevent direct creation through default constructor
{
}

public static MyType CreateNewMyType()
{
return new MyType();
}
}

然后你必须实现一个自定义模型绑定(bind)器,它调用工厂方法 CreateNewMyType() 而不是通过反射创建一个新的 MyType:

public class MyTypeBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext,
ModelBindingContext bindingContext,
Type modelType)
{
return MyType.CreateNewMyType();
}
}

此外,如果您对默认模型绑定(bind)器的当前功能或实现不满意,那么您可以轻松地将其替换为您自己的实现。

关于C#MVC : When to use a specific (non-default) ModelBinder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977784/

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