ASP.NET Core中的模型绑定是将HTTP请求中的数据绑定到控制器的参数或模型对象上。有时候,可能会遇到ModelName始终为空的情况。以下是解决该问题的一种方法,包含代码示例:
public class CustomModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var modelName = bindingContext.FieldName; // 获取ModelName
var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
if (valueProviderResult != ValueProviderResult.None)
{
bindingContext.ModelState.SetModelValue(modelName, valueProviderResult);
// 执行自定义的模型绑定逻辑
// 将数据绑定到模型对象上
// 示例:将数据绑定到字符串属性上
var model = new CustomModel();
model.Name = valueProviderResult.FirstValue;
bindingContext.Result = ModelBindingResult.Success(model);
}
return Task.CompletedTask;
}
}
public class CustomModel
{
[ModelBinder(BinderType = typeof(CustomModelBinder))]
public string Name { get; set; }
}
public IActionResult MyAction([Bind("Name")]CustomModel model)
{
// 使用绑定后的CustomModel对象
// ...
}
通过以上步骤,你可以自定义模型绑定逻辑,并确保ModelName不为空。在绑定模型时,自定义模型绑定器会被调用,并将数据绑定到模型对象的属性上。