Some of the lines should match the score:
public class DynamicRegularExpressionAttribute : ValidationAttribute { public string PatternProperty { get; set; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { PropertyInfo property = validationContext.ObjectType.GetProperty(PatternProperty); if (property == null) { return new ValidationResult(string.Format("{0} is unknown property", PatternProperty)); } var pattern = property.GetValue(validationContext.ObjectInstance, null) as string; if (string.IsNullOrEmpty(pattern)) { return new ValidationResult(string.Format("{0} must be a valid string regex", PatternProperty)); } var str = value as string; if (string.IsNullOrEmpty(str)) {
and then:
Model:
public class City { [DynamicRegularExpression(PatternProperty = "RegEx")] public string Zip { get; set; } public string RegEx { get; set; } }
Controller:
public class HomeController : Controller { public ActionResult Index() { var city = new City { RegEx = "[0-9]{5}" }; return View(city); } [HttpPost] public ActionResult Index(City city) { return View(city); } }
View:
@model City @using (Html.BeginForm()) { @Html.HiddenFor(x => x.RegEx) @Html.LabelFor(x => x.Zip) @Html.EditorFor(x => x.Zip) @Html.ValidationMessageFor(x => x.Zip) <input type="submit" value="OK" /> }
source share