Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Asp.net MVC 2中对集合项应用验证_Asp.net_.net_Asp.net Mvc_Asp.net Mvc 2_Asp.net Mvc Validation - Fatal编程技术网

如何在Asp.net MVC 2中对集合项应用验证

如何在Asp.net MVC 2中对集合项应用验证,asp.net,.net,asp.net-mvc,asp.net-mvc-2,asp.net-mvc-validation,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 2,Asp.net Mvc Validation,我有一个强类型视图,其中包含表示集合项的控件(输入框)。因此,以添加员工详细信息的视图为例,其中有一组输入字段可供输入部门名称。这些输入字段将在客户端动态添加 以下是这两个实体的类结构: public class Employee { public int EmployeeID{get;set;} public string Name {get;set; } public IList<Department> DepartmentList{get;set;} } public

我有一个强类型视图,其中包含表示集合项的控件(输入框)。因此,以添加员工详细信息的视图为例,其中有一组输入字段可供输入部门名称。这些输入字段将在客户端动态添加

以下是这两个实体的类结构:

public class Employee
{

public int EmployeeID{get;set;}
public string Name {get;set; }
public IList<Department> DepartmentList{get;set;}


}


public class Deparment { 
[Required(ErrorMessage="This is a required Field")]
public string Name {get;set; }
public int ID { get;set; }

}
公共类员工
{
public int EmployeeID{get;set;}
公共字符串名称{get;set;}
公共IList部门列表{get;set;}
}
公营部门{
[必需(ErrorMessage=“这是必填字段”)]
公共字符串名称{get;set;}
公共int ID{get;set;}
}
部门名称的输入是动态生成的,名称的设置方式是在过帐后实现模型绑定

<input type='text' class='input-choice' id='txtChoice0' name='Department[0].Name' />

现在我的问题是,我应该如何对此应用验证?。Microsoft Validation不会将验证推送到mvcClientValidationMetadata中,原因是我假设框架在加载视图时没有看到任何模型绑定


有什么想法吗?

我相信您想要的是如何使用“Required”属性验证dropdownlist中的值。您需要对员工模型进行一些更改

首先,您需要一个“DepartmentCode”属性,因为您将存储从下拉列表中选择的部门代码

然后您可以将部门列表设置为
IEnumerable

因此,您的员工模型如下所示

public class Employee
{    
    public int EmployeeID{get;set;}
    public string Name {get;set; }
    [Required(ErrorMessage = "Please select a department")]
    public string DepartmentCode { get; set; }
    public IEnumerable<SelectListItem> DepartmentList{get;set;
}
公共类员工
{    
public int EmployeeID{get;set;}
公共字符串名称{get;set;}
[必需(ErrorMessage=“请选择一个部门”)]
公共字符串部门代码{get;set;}
公共IEnumerable部门列表{get;set;
}
你可以这样得到部门名单

public IEnumerable<SelectListItem> DepartmentList 
{
    get
    {
        //Your code to return the departmentlist as a SelectedListItem collection
        return Department
            .GetAllDepartments()
            .Select(department => new SelectListItem 
            { 
                Text = department.Name, 
                Value = department.ID.ToString() 
            })
            .ToList();
    }
}
公共IEnumerable部门列表
{
得到
{
//将部门列表作为SelectedListItem集合返回的代码
退货部
.GetAllDepartments()
.选择(部门=>new SelectListItem
{ 
Text=部门名称,
Value=department.ID.ToString()
})
.ToList();
}
}
最后在视图中

<%: Html.DropDownListFor(model => model.DepartmentCode, Model.DepartmentList, "select")%>
<%: Html.ValidationMessageFor(model => model.DepartmentCode)%>
model.DepartmentCode,model.DepartmentList,“选择”)%%>
型号.部门代码)%>

现在,当您尝试在不选择部门的情况下提交时,应该验证它

您希望更精确地验证什么?您是在谈论服务器端验证还是客户端验证,还是两者都需要?您是否可以在类中包括属性的属性标记…即,[必需(ErrorMessage=“X是必需的”)]@米克韦布:已经这样了there@DarinDimitrov:我想在客户端验证,但使用数据批注。我有所有属性,它们适用于员工姓名,但问题是如何为收集字段(如部门字段)设置验证。感谢回答,但我不认为这有帮助,我不需要任何部门代码,我只需要一个附加到employee对象的department对象列表。在UI端,正如我所说,将有一个表单用于输入员工详细信息,最多有五个文本框用于输入部门名称。department不是从任何地方自动填充的。此外,此employee department只是一个示例。在我的情况下,子对象和父对象都会同时添加时间很像一个调查问题及其答案。因此,基本上根据您的示例,您将有5个部门字段,但它应该经过验证,以便至少有一个部门具有值。我不认为您将能够直接通过向集合中添加必需的属性来实现这一点。您必须研究该选项此讨论可能会对您有所帮助(它是MVC3,但应该类似于MVC2)。关闭但不够近,表单将有一个按钮调用“添加部门”。这将允许用户最多添加5个部门。一旦添加,验证应适用于所有部门,无论您只添加1个或2个、3个、4个、5个。这是Steven Sanderson的一篇博文。这可能与您的实际情况不完全相同;但我相信您应该能够采用此方法。这是用于动态控制。目前,我正在努力解决这一问题对于输入框列表,请执行此操作。