【问题标题】:MVC3 cannot validate dropdownforMVC3 无法验证下拉列表
【发布时间】:2013-06-24 14:25:16
【问题描述】:

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

提前感谢您的帮助。

【问题讨论】:

  • 为什么你的Lookup 类的ID 可以为空?
  • 因为我读到验证器不适用于不可为空的类型,但正如您所见,我完全错了。

标签: asp.net-mvc asp.net-mvc-3 validation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    1. 更改您的 ViewModel,使 Category 成为 Int32/int(而不是 Lookup 对象)。
    2. 在接收操作映射中,Lookup 基于 Category 具有的填充值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-28
      • 2012-05-29
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多