我在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>
我错过了什么?
答案 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属性