2011-09-05 40 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屬性

相關問題