2011-09-05 39 views
18

我有CSHTML文件dropdownlistfor:MVC dropdownlistfor没有标示,但仍然需要

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> 

我在想什么?

回答

37

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

public long? KategoriaWlasnaId { get; set; } 

现在将不再需要,如果用户没有在下拉列表中选择任一元素的值将是null。如果你想让它需要和个性化,你可以与所需的属性修饰它的消息:

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

非常感谢您的配合。我完全错过了这样一个小小的解决方案。 – blackik

+0

谢谢。价值类型必须“自动需要”是非常有意义的,但我也设法解决了这个问题。 – Moshe

4

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

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

如果数据类型(使用长)不是必须那么这也将只是改变长串的工作

众长KategoriaWlasnaId {获得;组; }

public string KategoriaWlasnaId {get;组; }

这也

公众long? KategoriaWlasnaId {get;组; }

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

相关问题