2016-02-19 49 views
0

我在接觸工作我們表格,我能夠做一個成功的驗證,但我有一個小問題,MVC的驗證,只有HTML

當我提出和懷念所需的值中的一個,形式來返回錯誤消息並且不保留該值,我注意到只有當我僅使用HTML時纔會發生,它將與HTML幫助程序一起正常工作。

這裏是我的代碼片段:

<div class="form-group"> 
         @Html.LabelFor(model => model.FirstName, "First Name") 
         <div> 
          <input class="form-control" name="FirstName" id="FirstName" data-val="true" type="text" value="" /> 
          @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" }) 
         </div> 
        </div> 

但它會爲姓領域的工作:提交後 filling the info

注意:

<div class="form-group"> 
         @Html.LabelFor(model => model.LastName, "Last Name") 
         <div> 
          @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } }) 
          @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" }) 
         </div> 
        </div> 

灌裝信息姓氏留在那裏,但名字消失: notice after submitting the last name stay there but the first name disappear

任何幫助將不勝感激:)

+0

爲什麼你手動生成HTML的看法?助手會生成正確的html,包括根據「ModelState」值正確設置'value'屬性。 –

+0

而你錯過了'data-val-required'屬性,所以你不打算去獲得客戶端驗證,所以你可以直接刪除'data-val =「true」'屬性 - 它的意義不大 –

回答

1

因爲你輸入標籤的value屬性值設置爲空字符串。

您應該使用Html.TextBoxFor輔助方法生成inuput字段,它會顯示您在模型驗證失敗時發佈的值。輔助方法也將生成客戶端不顯眼驗證所需的相關html5屬性。

@model ContactViewModel 
@using(Html.BeginForm()) 
{ 
    @Html.TextBoxFor(s=>s.FirstName) 
    @Html.ValidationMessageFor(model => model.FirstName) 
    <!-- Other fields --> 
    <input type="submit" />    
} 

Assumin您HttpPost action方法返回貼模型回哪個模型驗證失敗

[HttpPost] 
public ActionResult Contact(ContactViewModel model) 
{ 
    if(ModelState.IsValid) 
    { 
    // to do : return something 
    } 
    return View(model); 
}