20

我在 cshtml 文件中有一个下拉列表:

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>

我错过了什么?

4

3 回答 3

44

这很正常。值类型始终是必需的。您可以使您的财产为空:

public long? KategoriaWlasnaId { get; set; }

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

[Required]
public long? KategoriaWlasnaId { get; set; }
于 2011-09-05T14:42:54.240 回答
5

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

ModelValidatorProviders.Providers.Clear(); 
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelMetadataValidatorProvider());
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
于 2011-09-05T14:54:37.093 回答
0

如果数据类型(使用 long)不是必须的,那么这也可以通过将 long 更改为 string 来工作

公共长类别WlasnaId { 得到;放; }

公共字符串类别WlasnaId {获取;放; }

这也是

公长?类别WlasnaId { 得到;放; }

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

于 2017-04-18T06:07:03.327 回答