当用户填写我的表单以创建新Person时,我希望在名称之前或之后没有空格(类型String
)。
Good
:“John Doe”
Bad
:“John Doe”或“John Doe”
看看这个SO post,似乎我想使用自定义的ModelBinder。但是,由于我可能错误地理解了帖子,因此替换我的DefaultModelBinder将意味着不允许所有字符串都具有前导或尾随空格。
如何确保此自定义ModelBinder仅影响Name
?
答案 0 :(得分:2)
您可以将此行为直接写入视图模型(如果您使用的是视图模型):
private string name;
public string Name
{
get { return this.name; }
set { this.name = value.Trim(); }
}
然后Name
将在您的控制器操作方法中预先修剪。
答案 1 :(得分:0)
您可以使用Trim功能。 来自MSDN,
Trim方法从当前字符串中删除所有前导和尾随空白字符。
答案 2 :(得分:0)
您可以在属性中提及名称:
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);
}
}
这样任何在其中命名并且是字符串类型的名称属性都会在此处修剪空白区域。