选择Multiple DropDown时,字段类必须是数字

时间:2017-10-25 17:15:50

标签: c# asp.net-mvc razor

我绑定下拉为

模型方

public Registration()
    {            
        Availableclass = new List<SelectListItem>();
    }
    [Display(Name = "Class")]
    [Required(ErrorMessage = "Please Select {0}.")]
    public Nullable<int> ClassId { get; set; }
    public IList<SelectListItem> Availableclass { get; set; }  

控制器端

 public ActionResult RegisterTutor()
    {         
        var Class = GetClasses();
        var model = new Registration {Availableclass = Class };
        return View(model);
    }    
    public IList<SelectListItem> GetClasses()
    {           
        var Class = db.Classes
            .Select(x => new SelectListItem { Text = x.ClassName, Value = x.ClassId.ToString() })
            .ToList();            
        return Class;
    }  

查看方

 @Html.DropDownListFor(model => model.ClassId, Model.Availableclass, new { @multiple = "multiple", @class = "form-control" })            
 @Html.ValidationMessageFor(model => model.ClassId)

但是当我在下拉列表中选择Multiple时它显示验证为字段类必须是数字

enter image description here

如何摆脱此验证并让我知道如何在控制器端传递下拉列表的多个选择数据

1 个答案:

答案 0 :(得分:1)

目前,您的属性类型是一个可以为null的int,它可以存储null或单个int值。

使用DropDownListFor时,它会生成客户端验证所需的数据属性,以验证单个数字值。对于多选控制,所选值将是一个数组(选定值),因此得到错误。

对于多选,您的属性应为集合类型。

public int?[] ClassId { get; set; }

我不认为在这种情况下有任何理由使用nullable int,因为它是一个集合。您可以使用非可空int

public int[] ClassIds{ get; set; }