2010-03-22 35 views
11

Trường CheckBox được kết nối với giá trị là nullable.Tại sao CheckBoxFor sản xuất lỗi thời gian chạy

Theo quan điểm của tôi, tôi nhận được lỗi sau:

Cannot implicitly convert type 'bool?' to 'bool'

<%= Html.CheckBoxFor(model => model.Product.Exclusive) %> 

Làm thế nào để sửa chữa nó mà không cần phải thay đổi thiết kế cơ sở dữ liệu?

Trả lời

16

Độc quyền không thể là Nullable, nó không có ý nghĩa với ViewEngine khi đánh giá biểu thức. Nó phải kiểm tra hoặc không chọn hộp kiểm và cũng trả lời bằng giá trị true hoặc false. Mô hình của bạn cần có giá trị bool nhưng điều đó không có nghĩa là cơ sở dữ liệu của bạn phải biết điều đó. Bạn chỉ cần làm một bản dịch ở đâu đó giữa cơ sở dữ liệu và Mô hình, ví dụ. Model.Exclusive = DAO.Exclusive ?? false.

Nếu không biết những gì null đại diện trong lược đồ dữ liệu của bạn hoặc cách bạn tạo đối tượng mô hình của mình, thật khó để cung cấp cho bạn nhiều chi tiết hơn thế.

Edit: đã không kiểm tra này, nhưng bạn có thể nhận được ngay với một cái gì đó đơn giản như

public bool NoNullExclusive 
{ 
    get { return Exclusive ?? false; } 
    set { Exclusive = value; } 
} 

và thay thế

<%= Html.CheckBoxFor(model => model.Product.Exclusive) %> 

với

<%= Html.CheckBoxFor(model => model.Product.NoNullExclusive) %> 
+0

tôi tạo ra các tài sản mà bạn gợi ý trong một lớp học. Đây có phải là nơi tốt nhất để thực hiện thao tác này không? – Picflight

+0

Nếu lớp Sản phẩm của bạn được tạo tự động thì có. Nếu không thì trong chính lớp đó hoặc trong ánh xạ từ đối tượng truy cập dữ liệu đến mô hình. – pdr

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