0

不确定我是否正确填充了下拉列表,但在验证下拉列表中的值时遇到问题。选择一个值后,它仍然显示错误“值 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 -- ")

提前感谢您的帮助。

4

2 回答 2

2

DropDown 不是这样工作的。下拉菜单只能发送 ID,不能发送文本。您将整个 Category 对象传递给 DropDownListFor,它不会理解。

@Html.DropDownListFor(m => m.Category.ID, new SelectList(Model.Categories, "ID", "Description", -1), "-- Please Select -- ")
于 2013-06-24T14:30:56.943 回答
1

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

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

  1. 改变你的 ViewModel 所以CategoryInt32/ int(而不是Lookup对象)。
  2. 在接收操作映射中,Lookup基于Category填充值的内容。
于 2013-06-24T14:32:47.940 回答