我不确定我是否正确填充了我的下拉列表但是我在下拉列表中验证值时遇到问题。选择一个值后,它仍显示错误'值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 -- ")
提前感谢您的帮助。
答案 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
。所以,简而言之:
Category
是Int32
/ int
(而不是Lookup
对象。)Lookup
基于Category
对填充值的内容。