mvc dropdownlistfor未标记为必需,但仍然是必需的

时间:2011-09-05 14:41:12

标签: asp.net-mvc-3 drop-down-menu required

我在cshtml文件中有一个dropdownlist:

var kategorie_wlasna = new SelectList(
  (from z in Model.Kategoria
    where !formReadOnly || z.Id == Model.KategoriaWlasnaId 
      select z), 
  "Id", 
  "Nazwa");
...
@Html.DropDownListFor(
  model => model.KategoriaWlasnaId, 
  kategorie_wlasna,
  "----",
  htmlClassDropDownListDef)

在我的viewModel中,我的属性没有任何注释为必需:

public long KategoriaWlasnaId { get; set; }

但该领域仍然是必需的。在浏览器中我得到:

<select class="input-validation-error form_object1" data-val="true" data-val-number="The field KategoriaWlasnaId must be a number." data-val-required="The KategoriaWlasnaId field is required." id="KategoriaWlasnaId" name="KategoriaWlasnaId">
  <option value="">-----</option>
  <option value="1227">Wykroczenie</option>
  <option value="1228">Przestępstwo</option>
</select>

我错过了什么?

3 个答案:

答案 0 :(得分:42)

这是正常的。始终需要值类型。你可以让你的财产可以为空:

public long? KategoriaWlasnaId { get; set; }

现在将不再需要它,如果用户未在下拉列表中选择任何元素,则其值为null。如果你想使它成为必需的并且个性化消息,你可以使用Required属性来装饰它:

[Required]
public long? KategoriaWlasnaId { get; set; }

答案 1 :(得分:4)

您可以修改默认DataAnnotationsModelValidatorProvider,以便在Application_Start方法中将以下行添加到Global.asax.cs,从而不需要值类型:

ModelValidatorProviders.Providers.Clear(); 
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelMetadataValidatorProvider());
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

答案 2 :(得分:0)

如果数据类型(使用long)不是必须的,那么只需将long更改为string

也可以

public long KategoriaWlasnaId {get;组; }

public string KategoriaWlasnaId {get;组; }

这也是

公众长吗? KategoriaWlasnaId {得到;组; }

如果您正在使用数据注释,您也可以使用Nullable属性