2012-03-30 26 views
6

Tôi có một lớp mô hình "Quốc gia" với thuộc tính "CultureId" không được đánh dấu là bắt buộc. Một lớp khác "CountryViewModel" giữ cùng thuộc tính "CultureId".ASP.NET MVC thêm xác nhận cho các trường không bắt buộc

Khi hiển thị chế độ xem "Tạo", tôi nhận thấy rằng thuộc tính dữ liệu xác thực đã được thêm vào hộp văn bản "CultureId", mặc dù không có chú thích dữ liệu nào được thêm vào.

Tôi đang sử dụng

@Html.HiddenFor(mode => mode.CultureId) 

gì có thể là nguyên nhân cho một hành vi như vậy?

Cảm ơn

Trả lời

0

nếu bạn có thể sử dụng chú thích dữ liệu, bạn nên kiểm tra này http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

namespace MvcApplication1.Models 
{ 
[MetadataType(typeof(MovieMetaData))] 
public partial class Movie 
{ 
} 


public class MovieMetaData 
{ 
    [Required] 
    public object Title { get; set; } 

    [Required] 
    [StringLength(5)] 
    public object Director { get; set; } 


    [DisplayName("Date Released")] 
    [Required] 
    public object DateReleased { get; set; } 
} 

}

nó giúp bạn thiết lập kiểm chứng thực mà không cần mô hình trên mặt cơ sở dữ liệu.

+0

Vấn đề của anh ta không phải là về cách đặt yêu cầu trên thuộc tính, nhưng cách tránh xác thực html không mong muốn mà anh ta đang chạy. Hơn nữa cách quản lý thuộc tính của bạn là điển hình của dữ liệu động, không phải cách MVC thường hoạt động – themarcuz

+0

tôi nghĩ rằng nó sẽ ghi đè quy tắc xác thực, nếu lớp siêu dữ liệu sẽ trống rỗng –

12

Tôi đoán CultureId của bạn là một int. MVC tự động thêm các thẻ bắt buộc vào các loại giá trị không thể null.

Để tắt chức năng này thêm

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

để Application_Start hoặc làm int của bạn nullable

+0

Đã thêm và vẫn còn hành vi tương tự. Tôi sẽ cố gắng để làm cho int nullable. Cảm ơn – Bill

+1

Câu trả lời hay. Nó hoạt động để loại bỏ xác nhận 'data-required', nhưng sau đó vì Id là' int', nó thêm 'data-val-number' mà vẫn ngăn cản việc gửi biểu mẫu khi cố tạo. Tôi có thể làm việc xung quanh nó bằng cách thiết lập giá trị mặc định như 0, nhưng tôi không cần phải. – eudaimos

+0

Cái xấu của tôi - nó hoạt động như việc xác thực dường như bỏ qua 'dữ liệu-val-số' cho các đầu vào bị ẩn – eudaimos

0

thử điều này:

ModelState["CultureId"].Errors.Clear(); 

if (ModelState.IsValid)  
    { 
     ..... 
    } 

Nếu CultureId là int thì nó cũng sẽ cung cấp cho bạn kết quả mong muốn ...

+1

Đây là một chút của một kludge tránh được vấn đề thực sự liên quan ở đây. Xem [câu trả lời từ dskh để biết thêm] (http://stackoverflow.com/a/9941032/237838). –

8

Có một số cách để xử lý e số này -
a). Đặt thuộc tính là Nullable như

public int? Age { get; set; } 

b). Sử dụng lớp dưới đây trong lớp điều khiển -

ModelState["Age"].Errors.Clear(); 

c). Thêm vào startup- DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

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