2013-04-29 93 views
3

我想在剃须刀视图中根据需要制作文本框字段。我无法使用验证属性[Required],因为字段名称是动态生成的。我检查了使用javascript将data-val-required字段设置为truethis answer。有没有其他的方式来做到这一点,因为我不会在运行项目之前知道字段ID?在剃刀视图中根据需要制作字段

编辑:

我尝试下面的代码和现在的工作,除了在表单提交不显示验证消息。

@for (int i = 0; i < Model.Controls.Length; i++) 
{ 
      @Html.TextBoxFor(x => x.Controls[i].Value, new { id = obj.VitalName, data_val_required = "true" }) 
      @Html.ValidationMessageFor(x => x.Controls[i].Value, "Please fill in the details.") 
     </td> 
    </tr> 
} 
+0

这可以通过属在生成字段名称时创建自定义验证器。字段如何生成? – Nomad101 2013-04-29 09:58:39

+0

如果您希望客户端验证并处理HTML 5,那么您可以使用所需的属性标记文本框字段,即' – 2013-04-29 10:06:01

回答

1

如果字段中的部分类生成的,你可以实现一个哥们类的领域中的元数据,如下所示:link。 如果您的代码是由ORM(例如实体框架)生成的,则生成的类应该是部分的。 所以,你需要做的是以下几点:

  1. 创建一个类来保存元数据,给它一个合适的名字。
  2. 创建一个部分类(使用与生成的类相同的名称空间)并使用MetadataType属性对其进行装饰。该属性需要一个类型,它是您刚刚创建的类。
  3. 将属性添加到元数据类。它们必须完全匹配生成的类中的属性,但不必重复所有属性,只需重复所需的属性。因此,如果您只想创建一个属性“姓氏”,只需添加

    [必需] 公共字符串姓氏{get; set; }

到类

3

使用@required = true在HTML中的属性,而不是data_val_required = "true"

@Html.TextBoxFor(x => x.Controls[i].Value, new { id = obj.VitalName, @required = true }) 
0

只是对于那些谁正在努力实现它通过@ Html.EditorFor,现在看来,这是不可能通过一些htmlAttributes,不要误将'additionalViewData'与'htmlAttributes'误解为现在2个小时:@