我一直在摸索,我沒能找到什麼似乎是一個簡單的要求一個答案:顯示驗證消息,但明確的價值
隨着MVC數據註釋驗證,可以顯示驗證消息('必須是最大長度爲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())模型作爲視圖結果。你確定你發佈了正確的代碼示例嗎? – 2012-07-12 06:55:41
@alexanerb是的,我的想法確切。是的,代碼示例是正確的。我也覺得很奇怪。 – 2012-07-12 07:14:50
查看HTML,輸入初始化值?也可能是瀏覽器緩存輸入字段。 – 2012-07-12 16:22:58