我有一个雇员包含功能列表的模型。员工至少应该有一个功能。如何在MVC中的对象的必需列表<>上获得不显眼的客户端验证?
public class Employee
{
[Required(ErrorMessage = "Name is Required")]
public string Name { get; set; }
[Required(ErrorMessage = "Email is Required")]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
ErrorMessage = "Email is not valid")]
public string Email { get; set; }
[Required(ErrorMessage = "At least one function is required")]
public List<Function> Functions { get; set; }
}
public class Function
{
[Required(ErrorMessage = "Name is Required")]
public string Name { get; set; }
}
我创建了一个EditorTemplate的功能
@model MvcClientSideValidation.Models.Function
<fieldset>
<legend>Functie</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</fieldset>
索引视图使用EditorFor和ValidationMessageFor。
@Html.EditorFor(m => m.Functions)
@Html.ValidationMessageFor(m => m.Functions)
视图还包含添加或删除函数的代码。
提交视图时,客户端验证不会检查函数是否存在。服务器端验证确实。问题是当列表为空时,没有为Function
属性呈现输入元素,因此没有可以添加验证标签的标签。
因此,我正在寻找一种简单的方法来对List
和[Required]
属性进行不显眼的客户端验证。
编辑:我刚刚意识到[必需的]属性可能只会验证Function
不是null
。它不会检查它是否包含任何项目。这对我来说很好,因为该属性将在回发时自动变为null。
也许我过分简化了我的问题。在真正的解决方案中,上传文件列表的模型以及至少一个文件应该被上传。我真的在寻找一种解决方案来进行服务器端同样的验证。 – comecme
@comecme - 是的,我所概述的会发生在客户端。我不明白你的澄清。你总是至少有文本框1(空或不)。我假设您有某种添加项目功能可以增加您上传的文件数量,以及从列表中删除项目的删除项目功能。只是不要让最后一项被删除,所以你总是至少有一组表单域来验证。 –
这意味着如果文件名为空,我必须确保我不呈现任何内容。另外,上传文件时,如果列表只包含一个空文件名,我应该使用该条目。对于第二个文件,我必须将新条目添加到列表中。没有我想要的那么简单。 – comecme