c#特定模型和特定变量类型的自定义模型绑定器
我自己对可为null的int和验证文本有一个问题 基本上,我想更改当未提供可为null的int时显示的验证消息 所以从c#特定模型和特定变量类型的自定义模型绑定器,c#,asp.net-mvc,C#,Asp.net Mvc,我自己对可为null的int和验证文本有一个问题 基本上,我想更改当未提供可为null的int时显示的验证消息 所以从 "The value 'xxxxxxxxxxxxxxxxxxxx' is invalid" 到 我自己有一个这样的定制模型活页夹 public class IntModelBinder : IModelBinder { public object BindModel(ControllerContext controllerContext, Model
"The value 'xxxxxxxxxxxxxxxxxxxx' is invalid"
到
我自己有一个这样的定制模型活页夹
public class IntModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var integerValue = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (integerValue == null || integerValue.AttemptedValue == "")
return null;
var integer = integerValue.AttemptedValue;
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, bindingContext.ValueProvider.GetValue(bindingContext.ModelName));
try
{
return int.Parse(integer);
}
catch (Exception)
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName, String.Format("\"{0}\" is invalid, please provide a valid number.", bindingContext.ModelName));
return null;
}
}
}
现在,我已经更新了我的global.asax.cs,所以所有可为null的int都使用此模型绑定器,但是我不希望所有可为null的int都使用此绑定器,我只希望特定的模型使用它,并且只在该模型中的可为null的int上使用我的模型绑定器。有没有一种方法可以将这个modelbinder绑定到我的模型,并且只与可为null的int变量关联
我试着像这样在我的模型上使用我的modebinder
[ModelBinder(typeof(IntModelBinder))]
public class CreateQuoteModel
{
....
}
但它不会检查可为null的int,我希望避免第三方加载项您在可为null的int上返回null
if (integerValue == null || integerValue.AttemptedValue == "")
return null;
因此,您没有将该错误添加到可为null的int上的modelstate中我也建议你使用
int result=0;
if(!int.TryParse(integer, out result)){
bindingContext.ModelState.AddModelError(bindingContext.ModelName, String.Format("\"{0}\" is invalid, please provide a valid number.", bindingContext.ModelName));
return null;
}
return result;
而不是异常处理流来避免这种反模式只要您的模型上有一个可为null的int,并且所需的属性带有一条自定义消息,这肯定会起作用吗
相反地,您可以使用正则表达式匹配来检查长度和类型这不起作用,因为模型绑定器接管了所有的值检查,因此它忽略了模型内部的所有字符串和日期时间我不确定您的意思是什么?将属性添加到为您验证属性的所有必填字段中。如果您需要自定义行为,请创建自定义属性并使用适当的接口。谢谢您的回答,但这并不能解决我的实际问题
int result=0;
if(!int.TryParse(integer, out result)){
bindingContext.ModelState.AddModelError(bindingContext.ModelName, String.Format("\"{0}\" is invalid, please provide a valid number.", bindingContext.ModelName));
return null;
}
return result;