此问题必须先问过,但无法找到。
我知道通过创建自定义模型绑定器,我可以处理用户输入的数据。有修剪字符串属性的示例。这是一个例子:ASP.NET MVC: Best way to trim strings after data entry. Should I create a custom model binder?
我的问题是如何使用自定义属性控制何时处理或不处理。
例如,我可能想要自动大写字符串属性的第一个字母,只有我有一个如下所示的属性:
public class MyModel
{
[CapitalizeFirstLetter]
public string FirstName { get; set; }
[CapitalizeFirstLetter]
public string LastName { get; set; }
public string UserName { get; set; }
}
在此示例中,将处理名字和姓氏属性,但不会处理用户名,尽管这三个属性都是字符串属性。
我该如何处理?
答案 0 :(得分:1)
您需要检查属性以查看它是否具有特定的属性集:
public class CapitalizeFirstLetterModelBinder : DefaultModelBinder
{
protected override void SetProperty(
ControllerContext controllerContext,
ModelBindingContext bindingContext,
System.ComponentModel.PropertyDescriptor propertyDescriptor,
object value)
{
if (propertyDescriptor.Attributes.Any(att => typeof(att) == typeof(CapitalizeFirstLetterAttribute))
{
var stringValue = (string)value;
if (!string.IsNullOrWhiteSpace(stringValue))
{
value = stringValue.First().ToString().ToUpper() + stringValue.Substring(1);
}
else
{
value = null;
}
}
base.SetProperty(controllerContext, bindingContext,
propertyDescriptor, value);
}
}