Asp.net mvc MVC3无法验证的下拉列表

Asp.net mvc MVC3无法验证的下拉列表,asp.net-mvc,asp.net-mvc-3,validation,Asp.net Mvc,Asp.net Mvc 3,Validation,不确定是否正确填充了下拉列表,但我在验证下拉列表中的值时遇到问题。当选择一个值时,它仍然显示错误“值x无效”。类型是int?我知道int不能与验证器一起工作 查看模型代码: [Display(Name = "Category")] [Required(ErrorMessage = "Category is required.")] public AWS.DTO.Lookup Category { get; set; } public IEnumerable<AWS.

不确定是否正确填充了下拉列表,但我在验证下拉列表中的值时遇到问题。当选择一个值时,它仍然显示错误“值x无效”。类型是int?我知道int不能与验证器一起工作

查看模型代码:

[Display(Name = "Category")]
    [Required(ErrorMessage = "Category is required.")]
    public AWS.DTO.Lookup Category { get; set; }
    public IEnumerable<AWS.DTO.Lookup> Categories { get; set; }
查找类型:

public class Lookup
{
    public int? ID { get; set; }
    public string Description { get; set; }
}
查看代码:

@Html.DropDownListFor(m => m.Category, new SelectList(Model.Categories, "ID", "Description", -1), "-- Please Select -- ")

提前感谢您的帮助。

下拉列表不适用于这种情况。下拉列表只能发送ID,不能发送文本。您正在将整个Category对象传递给DropDownListFor,它无法理解

@Html.DropDownListFor(m => m.Category.ID, new SelectList(Model.Categories, "ID", "Description", -1), "-- Please Select -- ")

下拉菜单不是这样的。下拉列表只能发送ID,不能发送文本。您正在将整个Category对象传递给DropDownListFor,它无法理解

@Html.DropDownListFor(m => m.Category.ID, new SelectList(Model.Categories, "ID", "Description", -1), "-- Please Select -- ")

一旦选中,它就不会绑定到
查找
模型。MVC的工作方式与ASP不同,ASP接收回一个对象(ASP您将“绑定”一个可枚举的对象,当选择时,返回整个对象——在MVC中不是这种情况,只返回键(或映射为下拉列表值的任何属性))

相反,您必须接受一个
Int32
,然后在操作中检索匹配的
Lookup
。因此,简言之:

  • 更改视图模型,使
    类别
    成为
    Int32
    /
    int
    (而不是
    查找
    对象)
  • 在接收操作映射中,根据填充值的
    类别
    进行
    查找

  • 一旦选中,它就不会绑定到
    查找
    模型。MVC的工作方式与ASP不同,ASP接收回一个对象(ASP您将“绑定”一个可枚举的对象,当选择时,返回整个对象——在MVC中不是这种情况,只返回键(或映射为下拉列表值的任何属性))

    相反,您必须接受一个
    Int32
    ,然后在操作中检索匹配的
    Lookup
    。因此,简言之:

  • 更改视图模型,使
    类别
    成为
    Int32
    /
    int
    (而不是
    查找
    对象)
  • 在接收操作映射中,根据填充值的
    类别
    进行
    查找

  • 为什么您的
    Lookup
    类的
    ID
    可以为空?因为我了解到验证器不能处理不可为空的类型,但正如你所看到的,我完全弄错了。为什么你要让
    查找
    类的
    ID
    为空?因为我读到验证器不能处理非空类型,但正如你所看到的,我完全弄错了。