我有像这样的viewmodel
public class MyViewModel
{
public List<string> SubSiteNames { get; set; }
}
在视图中我这样做
@for (int i = 1; i <= 3; i++)
{
<label>Name </label>
@Html.TextBoxFor(m => m.SubSiteNames[i - 1])
}
验证的问题。我需要第一个元素。我怎么能实现它?
注意:
我想提供验证。当用户点击提交时,第一个文本框中会出现“需要名称”的消息
答案 0 :(得分:1)
您可以为Custom
写DataAnnotation
List
至没有第一个元素null
public class MustHaveFirstElementAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var list = value as IList;
if (list != null)
{
return list[0] != null;
}
return false;
}
}
[MustHaveFirstElementAttribute (ErrorMessage = "First Element is required")]
public List<YourClass> SubSiteNames{ get; private set; }
如果你想用jquery
做 @for (int i = 1; i <= 3; i++)
{
<label>Name </label>
@Html.TextBoxFor(m => m.SubSiteNames[i - 1],new { id="site"+i.ToString()})
}
然后在jquery中提交
$("#submit").click(function(e){
if($("site1").val()=="")
{
alert("Invalid");
e.preventDefault();
}
});
答案 1 :(得分:0)
仅制作集合中的第一个项目有点复杂。我建议您为此创建一个单独的属性并根据需要进行标记:
视图模型
public class MyViewModel
{
[Required]
public string RequiredName { get; set; }
public List<string> SubSiteNames { get; set; }
}
查看
<label>Name </label>
@Html.TextBoxFor(m => m.RequiredName)
@Html.ValidationMessageFor(m => m.RequiredName)
@for (int i = 1; i <= 3; i++)
{
<label>Name </label>
@Html.TextBoxFor(m => m.SubSiteNames[i - 1])
}
然后,只需从SubSiteNames
列表中删除第一项,然后将其设置为RequiredName
。