当用户填写我的表单以创建新人员时,我希望名称(类型String
)之前或之后没有空格。
Good
:“约翰·多伊”
Bad
:“John Doe”或“John Doe”
看这个 SO post,似乎我想使用自定义 ModelBinder。但是,由于我可能错误地理解了这篇文章,替换我的 DefaultModelBinder 将意味着所有字符串都不允许有前导或尾随空格。
如何确保只有Name
's 受此自定义 ModelBinder 影响?
当用户填写我的表单以创建新人员时,我希望名称(类型String
)之前或之后没有空格。
Good
:“约翰·多伊”
Bad
:“John Doe”或“John Doe”
看这个 SO post,似乎我想使用自定义 ModelBinder。但是,由于我可能错误地理解了这篇文章,替换我的 DefaultModelBinder 将意味着所有字符串都不允许有前导或尾随空格。
如何确保只有Name
's 受此自定义 ModelBinder 影响?
您可以将此行为直接写入您的视图模型(如果您使用的是视图模型):
private string name;
public string Name
{
get { return this.name; }
set { this.name = value.Trim(); }
}
然后Name
将在您的控制器操作方法中预先修剪。
您可以使用修剪功能。来自 MSDN,
Trim 方法从当前字符串中删除所有前导和尾随空白字符。
您可以在属性中提到名称,例如:
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
然后您可以将下面的修改代码用于您提到的帖子中的自定义模型绑定器解决方案:
public class TrimModelBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext,
System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
{
if (propertyDescriptor.Name.ToUpper().Contains("NAME")
&& (propertyDescriptor.PropertyType == typeof(string)))
{
var stringValue = (string) value;
if (!string.IsNullOrEmpty(stringValue))
stringValue = stringValue.Trim();
value = stringValue;
}
base.SetProperty(controllerContext, bindingContext,
propertyDescriptor, value);
}
}
这样,在其中命名并且是字符串类型的任何名称属性都将在此处根据需要修剪空格。