MVC3无法验证dropdownfor

时间:2013-06-24 14:25:17

标签: 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.DTO.Lookup> Categories { get; set; }

控制器代码:

[PageOptions(Title = "Create FMR")]
    public ActionResult Create()
    {
        var model = new FMRRequestViewModel();

        model.Categories = new AWS.BL.Lookup().GetFMRCategories();

        return View(model);
    }

查找类型:

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 -- ")

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

一旦选择,它就不会绑定到Lookup模型。 MVC不像ASP一样工作,你收到一个对象(ASP你“绑定”一个可枚举的对象,当选择时,整个对象被返回 - 这不是mvc中的情况,只有密钥将是返回(或任何属性被映射为下拉列表值))。

相反,您必须接受Int32,然后在您的操作中检索匹配的Lookup。所以,简而言之:

  1. 更改您的ViewModel,因此CategoryInt32 / int(而不是Lookup对象。)
  2. 在接收操作地图中Lookup基于Category对填充值的内容。