2011-09-05 23 views
18

Tôi có một dropdownlistfor trong tập tin cshtml:dropdownlistfor MVC không được đánh dấu theo yêu cầu nhưng vẫn cần

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) 

Trong ViewModel của tôi, tôi có tài sản mà không có bất kỳ chú thích theo yêu cầu:

public long KategoriaWlasnaId { get; set; } 

Nhưng trường vẫn là Bắt buộc. Trong trình duyệt tôi nhận được:

<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> 

Tôi đang thiếu gì?

Trả lời

37

Điều đó là bình thường. Các loại giá trị luôn được yêu cầu. Bạn có thể làm nullable tài sản của bạn:

public long? KategoriaWlasnaId { get; set; } 

Bây giờ nó sẽ không còn được yêu cầu và nếu người dùng không chọn bất kỳ phần tử trong danh sách thả xuống giá trị của nó sẽ null. Và nếu bạn muốn làm cho nó cần thiết và cá nhân hóa thông điệp mà bạn có thể trang trí nó với các thuộc tính Required:

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

Cảm ơn bạn rất phù hợp. Tôi đã hoàn toàn bỏ lỡ giải pháp tầm thường như vậy. – blackik

+0

Cảm ơn. Nó làm cho cảm giác hoàn hảo rằng các loại giá trị phải được "tự động yêu cầu", nhưng tôi cũng quản lý để rơi cho vấn đề này. – Moshe

4

Bạn có thể thay đổi mặc định DataAnnotationsModelValidatorProvider để kiểu giá trị sẽ không được yêu cầu bằng cách thêm các dòng sau vào Global.asax.cs trong phương pháp Application_Start:

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

Nếu datatype (sử dụng lâu) không phải là một thì đây cũng sẽ làm việc chỉ bằng cách thay đổi thời gian để chuỗi

công KategoriaWlasnaId dài {get; bộ; }

chuỗi công cộng KategoriaWlasnaId {get; bộ; }

điều này cũng

công khai dài? KategoriaWlasnaId {get; bộ; }

cũng nếu bạn đang sử dụng chú thích dữ liệu, bạn có thể sử dụng thuộc tính Nullable cũng như

Các vấn đề liên quan