2013-11-21 101 views
0

當我提交我的形式,客戶端驗證工作,但它不是爲無效表單域顯示錯誤信息......MVC4客戶端驗證不顯示

示範

public class Blog : MainDbContext 
{ 
    public int Id { get; set; } 

    [Display(Name="Author")] 
    public int Profile { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "Title is required.")] 
    public string Title { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "At least one Tag is required.")] 
    public string Tags { get; set; } 
} 

的視圖模型

public class BlogEditViewModel 
    { 
     public BlogEditViewModel(Blog blogItem, IEnumerable<SelectListItem> staffList) 
     { 
      this.BlogItem = blogItem; 
      this.StaffList = staffList; 
     } 

     public Blog BlogItem { get; set; } 
     public IEnumerable<SelectListItem> StaffList { get; private set; } 
    } 

<section> 
     @Html.LabelFor(model => model.BlogItem.Tags) 
     @Html.EditorFor(model => Model.BlogItem.Tags, null, "Tags") 
     @Html.ValidationMessageFor(model => model.BlogItem.Tags) 
</Section> 

佈局

<script src="/Scripts/jquery-1.7.1.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script> 

的輸出(關於表單提交)

<input type="text" value="ok" name="Tags" id="Tags" data-val-required="At least one Tag is required." data-val="true" class="text-box single-line input-validation-error"> 
<span data-valmsg-replace="true" data-valmsg-for="BlogItem.Tags" class="field-validation-valid"></span> 

我所期望是上述跨度標籤到含有作爲n定義錯誤消息中的模型。

我懷疑與EditorFor中的命名有關的問題,正如您所看到的,我使用重載指定'htmlfieldname',因爲如果沒有這種情況,表單數據將無法映射帶有模型的表單字段&無法保存從數據提交。

如果我不使用重載的EditorFor,驗證工作,但上面提到的表單數據無法映射與模型

我怎麼驗證工作表單字段?

感謝 KB

回答

1

在您查看和客戶端驗證添加這個腳本工作正常,

<script src="@Url.Content("~/Script/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Script/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

我覺得問題是你必須刪除null, "Tags"

@Html.EditorFor(model => Model.BlogItem.Tags) 

,或者你必須分配null, "Tags"

@Html.ValidationMessage("Tags") 

例:

查看

@Html.LabelFor(m => m.Name) 
       @Html.TextBoxFor(m => m.Name, new { Name="asd"}) 
       @Html.ValidationMessage("asd") 

型號

public class RegisterModel 
    { 
    [Required(ErrorMessage = "Name is required.")] 
     public string Name { get; set; } 
} 
+0

我已經更新了我的問題,以顯示我已經包含這些,謝謝 –