【发布时间】:2012-07-11 22:46:02
【问题描述】:
我一直在四处寻找,但无法找到看似简单的要求的答案:
使用 MVC Data Annotation 验证,是否可以在验证摘要或字段旁边显示验证消息('必须是最大长度为 5 的字符串'),但清除文本框的值(验证失败时) )。
我尝试使用 ModelState.Clear() 和 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>
}
【问题讨论】:
-
看到“预填充”值真的很奇怪,因为如果模型无效,则返回空(新 CompanyInput())模型作为视图结果。你确定你发布了正确的代码示例吗?
-
@alexanerb 是的,我的想法完全正确。是的,代码示例是正确的。我也觉得很奇怪。
-
检查 HTML,输入的值是否已初始化???也可能是浏览器正在缓存输入字段。
-
@alexanderb 好声音,我将通过代理运行并检查一下。但是,我注意到,如果我执行
@Html.PasswordFor(m => m.CompanyName),则该值会被清除。
标签: c# asp.net-mvc validation asp.net-mvc-4 data-annotations