gpt4 book ai didi

c# - 如何获取我试图在 IModelBinder 中绑定(bind)的参数的属性?

转载 作者:行者123 更新时间:2023-11-30 12:33:50 26 4
gpt4 key购买 nike

有没有办法从 IModelBinder.BindModel() 中访问当前正在处理的 Controller 操作参数的属性?

特别是,我正在编写一个 Binder ,用于将请求数据绑定(bind)到任意 Enum 类型(指定为模型 Binder 的模板参数),我想为每个 Controller 操作参数指定我想使用这个 Binder 一个 HTTP 请求值的名称来从中获取 Enum 值。

例子:

public ViewResult ListProjects([ParseFrom("jobListFilter")] JobListFilter filter)
{
...
}

和模型 Binder :

public class EnumBinder<T>  : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
HttpRequestBase request = controllerContext.HttpContext.Request;

// Get the ParseFrom attribute of the action method parameter
// From the attribute, get the FORM field name to be parsed
//
string formField = GetFormFieldNameToBeParsed();

return ConvertToEnum<T>(ReadValue(formField));
}
}

我怀疑在请求工作流中可能还有另一个更合适的点,我将在其中提供属性值。

最佳答案

了解如何使用 CustomModelBinderAttribute 派生类来做到这一点:

public class EnumModelBinderAttribute : CustomModelBinderAttribute
{
public string Source { get; set; }
public Type EnumType { get; set; }

public override IModelBinder GetBinder()
{
Type genericBinderType = typeof(EnumBinder<>);
Type binderType = genericBinderType.MakeGenericType(EnumType);

return (IModelBinder) Activator.CreateInstance(binderType, this.Source);
}
}

现在 Action 方法看起来像这样:

public ViewResult ListProjects([EnumModelBinder(EnumType=typeof(JobListFilter), Source="formFieldName")] JobListFilter filter)
{
...
}

关于c# - 如何获取我试图在 IModelBinder 中绑定(bind)的参数的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297268/

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