我有以下电话:
@Html.TextBoxFor(m => m.SelectedName)
@Html.TextBoxFor(m => m.Selections[0].Name)
在这两种情况下,我分别使用以下注释标记SelectedName
和Name
[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中被忽略了,它似乎是一个相当常见的用例。我如何验证作为数组或包含数组的视图模型?
===================== EDIT为了清晰起见为ViewModels添加代码================== ===
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)
答案 0 :(得分:2)
我在获得更多反馈之前犹豫不决,但是
[required]
注释不能应用于数组或复杂对象。
您可以为类的特定元素甚至嵌套类的成员应用[required]
注释。
显然我们都知道我们可以注释经典
[required]
public string SelectedName {get; set;}
这应该有效。我不能谈论这个问题。
但是,相反地对字符串数组进行注释
[required]
public string[] SelectedName {get;set;}
会失败。为了成功,你必须注释模型的每个元素。
同样如果我们尝试使用成员注释嵌套模型 [需要] 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; }
}