我需要能够在使用validation属性验证之前更改输入数据。例如在瑞典,邮政编码可以包含空格,例如“111 22”。我想在验证之前删除空间。我试着用下面的解决方案没有任何成功。
我有一个带有验证属性StringLength(5)的属性。提交表单后,我在绑定到视图模型类时更新属性值。我的问题是,当验证发生时,它使用在我更改它之前发布的值,尽管我知道DefaultModelBinder在set方法之后运行。在下面的代码示例中,我认为输入值“111 22”和“11122”都可以工作,因为在我的set方法中,我从字符串中删除了空格,但是“111 22”没有按预期验证。
示例Index.cshtml文件
@using (Html.BeginForm("Index", "Form", FormMethod.Post))
{
Enter post code
@Html.TextBoxFor(x => x.PostCode)
@Html.ValidationMessageFor(x => x.PostCode)
<input type="submit" value="Save"/>
}
示例视图模型类(Client.cs)
private string postCode = null;
[StringLength(5)]
public string PostCode {
get { return this.postCode; }
set
{
this.postCode = value?.Replace(" ", string.Empty);
}
}
控制器中的示例操作方法
public ActionResult Index(Client client)
{
return View(client);
}
我知道在验证之前调用属性中的set方法,因为我试图覆盖DefaultModelBinder,然后为它添加了一个断点。我还创建了一个自定义验证属性,该属性继承自StringLength以检查验证的值。有什么建议?
奖金问题,我也想知道为什么验证后返回的值会将旧值绑定到输入控件但是我只是将模型属性写入视图(@Model。名称)我得到了更新的值。