我一直在四处寻找,但我无法找到看似简单的要求的答案:
使用 MVC Data Annotation 验证,是否可以在验证摘要或字段旁边显示验证消息('必须是最大长度为 5 的字符串'),但清除文本框的值(当验证失败时)。
我尝试使用ModelState.Clear()
and ModelState.Remove("CompanyName")
,但这会清除值和验证消息(验证状态)。
我问这个是因为最近我们进行了渗透测试,其中一个建议是如果验证失败,则不要预先填充安全值(信用卡号等)。这显然是一个小问题,但如果我们没有必要,建议不要通过互联网(从服务器)发回价值。
这是我正在使用的代码:
public ActionResult Edit()
{
return View();
}
[HttpPost]
public ActionResult Edit(CompanyInput input)
{
if (ModelState.IsValid)
{
return View("Success");
}
//ModelState.Clear // clears both the value and validation message
//ModelState.Remove("CompanyName") // same result
return View(new CompanyInput());
}
和视图模型:
public class CompanyInput
{
[Required]
[StringLength(5)]
public string CompanyName { get; set; }
[DataType(DataType.EmailAddress)]
public string EmailAddress { get; set; }
}
和观点:
@model Test.Models.CompanyInput
<h2>Edit</h2>
@using (Html.BeginForm("Edit", "Company"))
{
@Html.EditorForModel()
<button type="submit">Submit</button>
}