【问题标题】:Missing validation message using DropDownListFor使用 DropDownListFor 缺少验证消息
【发布时间】:2016-11-24 17:41:01
【问题描述】:

我正在使用 mvc 开发一个 c# 项目。我有一个创建表单,其中有一个下拉列表。下拉字段是必填字段(在我的模型中)。但是当我没有从下拉列表中选择一个值并单击“创建”按钮时,我没有验证消息(即使我的模型类中有一个)。这是我的模型:

[Required(ErrorMessage = "This field is required.")]
public int MappingType { get; set; }

这是我的看法:

@Html.DropDownListFor(m => m.id, new SelectList(ViewBag.mappingTypes, "Value", "Text"), "Choose")
@Html.ValidationMessageFor(model => model.MappingType, "", new { @class = "text-danger" })

我不知道我在哪里犯了错误..

【问题讨论】:

  • 您显示的属性名为MappingType,但您生成的下拉列表是针对名为id 的属性! (当它已经是SelectList 时,为什么要从ViewBag.mappingTypes 创建一个新的SelectList
  • 你的意思是我应该在我的模型中添加“id”属性并使其成为必需,然后像这样更改视图:@Html.DropDownListFor(m => m.id, new SelectList (ViewBag.mappingTypes, "Value", "Text"), "Изберете") @Html.ValidationMessageFor(model => model.id, "", new { @class= "text-danger" })
  • @Html.DropDownListFor(m => m.MappingType, (IEnumerable<SelectListItem>)ViewBag.mappingTypes, "Choose"),因为这似乎是您想要绑定的内容。
  • 非常感谢,我刚刚尝试了您的建议 (@Html.DropDownListFor(m => m.MappingType, ....)) 并出现了验证消息!

标签: c# asp.net-mvc validation


【解决方案1】:

发生这种情况是因为您正在为模型上的另一个属性生成下拉列表。 IE。您正在为id 创建下拉列表,而验证消息是为MappingType 创建的。为了使它工作,控制(在你的情况下是下拉列表)和验证消息应该是相同的属性。所以更改以下行

@Html.DropDownListFor(m => m.id, new SelectList(ViewBag.mappingTypes, "Value", "Text"), "Choose")

@Html.DropDownListFor(m => m.MappingType, new SelectList(ViewBag.mappingTypes, "Value", "Text"), "Choose")

【讨论】:

    【解决方案2】:

    您可以使用 viewdata 来绑定下拉菜单,如下所示。

    @Html.DropDownListFor(m => m.id,(SelectList)ViewData["mappingTypes"],"Choose")
    

    @Html.ValidationMessageFor(model => model.MappingType, "", new { @class= "text-danger" })

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多