2015-03-02 26 views
0

我有我的看法如下textboxforMVC 5个textboxFor data_val_required,data_val

@Html.TextBoxFor(m => m.AdvertModel.Title, new 
         { 
          @class = "form-control", 
          type = "text", 
          placeholder = "Enter a descriptive title about the item for sale", 
          id = "Enter a descriptive title", 
          data_val_required = "The Title field is required.", 
          data_val = "true" 
         }) 

你可以看到我已经添加了data_val_required和data_val属性做到这一点,这使得如下:

<input id="Enter a descriptive title" class="form-control" type="text" value="" placeholder="Enter a descriptive title about the item for sale" name="Title" data-val-required="The Title field is required." data-val-maxlength-max="100" data-val-maxlength="The field Title must be a string or array type with a maximum length of '100'." data-val="true"> 

当我运行应用程序并将其保留为空并单击提交时,ModelState.isValid始终为真,当我期望它为假时,它为什么一直说它是真的?

+2

按顺序为了使它成为'ModelState.isValid',你需要将几个属性应用于模型的属性,比如'[Required]'。简单地将属性添加到HTML标签不会工作。 **注意**:'data_val_required'和'data_val'用于客户端非侵害性验证。 – 2015-03-02 07:25:58

+0

显示你的模型 – 2015-03-02 07:31:28

+0

@JenishRabadiya我没有在我的模型中的标题变量的必需属性,我想弄清楚如果上述可能没有[必需]属性,并且能够使用ModelState.isValid – 2015-03-02 07:33:56

回答

1

将表单提交给POST方法时,表单值包含由每个控件name属性和value属性组成的键/值对。在你的情况下,它将是AdvertModel.Title=The value entered in the textbox。没有关于控件中其他属性的信息被发送到服务器。

data-*属性是通过基于应用到模型和验证属性HTML辅助渲染是有益的,只有你有相关的@Html.ValidationMessageFor()并包括相关的脚本文件(jQuery的,jquery.validate和jquery.validate.unobtrusive) 。

您将获得包括服务器端和客户端验证,如果你包括在模型属性

[Required(ErrorMessage = "The Title field is required.")] 
public string Title { get; set; } 

,并在视图

@Html.TextBoxFor(m => m.AdvertModel.Title, new { @class = "form-control", placeholder = "Enter a descriptive title about the item for sale", title = "Enter a descriptive title" }) 
@Html.ValidationMessageFor(m => m.AdvertModel.Title) 

旁注的[Required]属性:你不需要type="text" (这是由助手添加的),我假设id = "Enter a descriptive..."是一个错字,它确实是title = "Enter a descriptive..."