在Razor视图中根据需要创建字段

时间:2013-04-29 09:56:50

标签: asp.net-mvc asp.net-mvc-3 razor jquery-validate

我想在剃刀视图中根据需要创建一个文本框字段。我无法使用验证属性[Required],因为字段名称是动态生成的。我检查了this answer,它使用javascript将data-val-required字段设置为true。有没有其他方法可以做到这一点,因为我在运行项目之前不知道字段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>
}

3 个答案:

答案 0 :(得分:4)

在html属性中使用@required = true而不是data_val_required = "true"

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

答案 1 :(得分:1)

如果字段是在分部类中生成的,则可以使用字段的元数据实现伙伴类,如下所示:link。 如果您的代码是由ORM(例如实体框架)生成的,则生成的类应该是部分的。 所以你需要做的是:

  1. 创建一个类来保存元数据,为其指定一个合适的名称。
  2. 创建一个部分类(使用与生成的类相同的名称空间)并使用MetadataType属性进行修饰。该属性需要一个类型,即您刚刚创建的类。
  3. 向元数据类添加属性。它们必须完全匹配生成的类中的属性,但您不必复制所有属性,只复制您需要的属性。因此,如果您只想制作一个属性&#39;姓氏&#39;必填,只需添加

    [必需] public string Lastname {get; set; }

  4. 到你的班级

答案 2 :(得分:0)

对于那些试图通过@Html.EditorFor实现它的人来说,似乎不可能传递一些htmlAttributes,不要误认为&#39; additionalViewData&#39;与&#39; htmlAttributes&#39;正如我现在做了2个小时:@