【问题标题】:MVC3 DropDownList not validating with [Required] class field as type int? [duplicate]MVC3 DropDownList 未使用 [Required] 类字段作为 int 类型进行验证? [复制]
【发布时间】:2011-11-27 08:29:02
【问题描述】:

知道为什么以下下拉列表无法使用 int 类型的必填字段(下面的“标题”字段)进行验证吗?

    [Required]             // This works!
    [Display(Name = "Name")]
    public string Name { get; set; }

    [Required]             // This doesn't work 
    [Display(Name = "Title")]
    public int TitleId { get; set; }



     <div class="editor-label">
        @Html.LabelFor(model => model.Name, "Name")
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name, "This can't be blank!")
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.TitleId, "Title")
    </div>
    <div class="editor-field">
         @Html.DropDownListFor(model => model.TitleId, (SelectList)ViewBag.TitleId, String.Empty)
        @Html.ValidationMessageFor(model => model.TitleId)
    </div>

【问题讨论】:

  • 发布数据时,TitleId 是否有赋值?
  • 如果是整数?仍然无法正常工作,也许您为下拉菜单设置了默认值?即:(0,“所有记录”)而不是空值?
  • 不行...我将它设置为“-Select Me-”,不幸的是没有用。

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


【解决方案1】:

根据this work item,当 ViewBag 中的 SelectList 使用与相关字段相同的名称时,客户端验证会中断。 (即在你的情况下两者都是TitleId。)

试试这个:

@Html.DropDownListFor(model => 
    model.TitleId, (SelectList)ViewBag.TitleIdList, String.Empty)

您的 SelectList 相应地重命名为 TitleIdList

【讨论】:

  • $$$$$ 感谢您的帖子!就是这样!
【解决方案2】:

[Required] 仅适用于可为空的对象,而 int 不能为空。 尝试使用int? 而不是int

【讨论】:

  • 不行!这很奇怪。令我困惑的是,我还有另一个 int 类型可为空的下拉列表:[Required] [Display(Name = "Order ID")] public Nullable OrderId { get;放;如果它是空白的(“OrderId”),验证会捕获它。但是该值(“OrderId”)在我的对象绑定模型(数据库)中可以为空,而“标题”在数据库中不能为空。这是唯一的区别,除非我需要生成一个新视图,因为我将该类型更改为 int?。还有其他想法吗?
【解决方案3】:

或者试试这个。在您的 site.css 文件中添加以下代码

select.input-validation-error {
    /*border: 1px solid #e80c4d;*/
    /*Other styles*/
}

这会将下拉边框颜色显示为红色,当它为空时。

在查看页面中:

@Html.DropDownListFor(model => model.TitleID, Model.TitleIDList, "-- Select --", new { @class = "dropdownlist" }) @Html.ValidationMessageFor(model => model.TitleID, "This can't be blank")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多