1

我有以下电话:

    @Html.TextBoxFor(m => m.SelectedName)
    @Html.TextBoxFor(m => m.Selections[0].Name)

在这两种情况下,我分别用以下注释标记SelectedNameandName

    [Required(ErrorMessage = "Please provide required value")]

但是 SelectedName 打印正确的不显眼的 html 属性:

<input id="SelectedName" name="SelectedName" data-val="true" data-val-required="Please provide required value">

其中 m.Selections[0].Name 显示如下:

<input id="Selections_0__Name" name="Selections[0].Name" value="" type="text">

是什么赋予了?我不敢相信这种情况在 MVC4 中被忽略了,这似乎是一个相当常见的用例。我将如何验证作为数组或包含数组的视图模型?

=====================为清晰起见编辑为 ViewModel 添加代码=====================

public class ContainerVM
{
    [Required]
    public string SelectedName {get;set;}
    public MemberVM[] Selections {get;set;}
}

public class MemberVM
{
    [Required]
    public string Name { get;set; }
}

=====================表格====================

@using MyProject.Models;
@model ContainerVM
@{
    ViewContext.FormContext = new FormContext(); //This is just a hack because the parent isn't defined yet.
}

        @Html.TextBoxFor(m => m.SelectedCptGroupId)
        @Html.TextBoxFor(m => m.CptGroupSelections[0].Name)
4

1 回答 1

2

在获得更多反馈之前,我犹豫是否要提出答案,但是

[required]注释不能应用于数组或复杂对象。

您可以[required]为类的特定元素甚至嵌套类的成员应用注释。

显然我们都知道我们可以注释经典

[required]
public string SelectedName {get; set;}

这应该有效。这个问题我无话可说。

但是,相反地对字符串数组进行注释

[required]
public string[] SelectedName {get;set;}

会失败。要成功,您必须注释模型的每个元素。

同样,如果我们尝试使用成员 [required] public SelectionsModel Selections {get;set;} 注释嵌套模型

这也会失败。

最糟糕的是,您似乎正在尝试注释模型数组 [必需] public SelectionsModel Selections[] {get;set;}

这又会失败。


什么应该起作用(虽然我没有尝试过):

注释嵌套模型选择的每个元素。

然后数组的每个模型的每个元素都应该需要输入。

    public class SelectionsModel 
    {
        [required]
        public string name {get; set;}
        [required]
        public int age { get; set; }

    }
于 2013-02-26T00:20:09.340 回答