2013-08-13 27 views
5

Bảng của tôi có hai cột CreatedByCreateTime. Trong dạng xem của tôi, tôi không có các trường này. Bây giờ khi tôi cập nhật một bản ghi bằng cách sử dụng phương thức ASP.NET MVC4 Edit (post), các cột này được đặt thành null. Nhưng tôi muốn giữ lại các giá trị. Tôi biết trong phương thức Edit (post) của tôi, tôi có thể lấy bản ghi từ cơ sở dữ liệu và thiết lập các thủ công này theo cách thủ công. Nhưng tôi tự hỏi liệu tôi có thể yêu cầu Entity Framework không thay đổi các giá trị của các trường này hay không.Phương thức chỉnh sửa MVC4 thay đổi giá trị thành null nếu trường correspndong không tồn tại trong biểu mẫu

Trả lời

1

Bạn phải lựa chọn ở đây:

1) Như @KennyZ đề cập, thêm vào @Html.HiddenFor() đâu đó trong tầm nhìn của bạn, vào hình thức của bạn:

@Html.HiddenFor(m => m.CreatedBy) 
@Html.HiddenFor(m => m.createTime) 

2) Bạn có thể tự cập nhật thực thể đó và rời hai thuộc tính đó một mình:

var ent = dbctx.Entities.Find(model.ID); 

ent.Prop1 = model.Prop1; 
// ... also for other properties except those two property 

dbctx.SaveChanges(); 
3

Không, bạn không thể, nếu bạn muốn giữ các giá trị cũ thì bạn phải lấy bản ghi đầu tiên và sau đó gán giá trị bạn muốn cập nhật theo cách thủ công. Cách duy nhất khác là xem xét thuộc tính thực thể của bạn theo thuộc tính và gắn thẻ mà bạn muốn sửa đổi, như vậy:

db.MyEntity.Attach(myEntity); 
db.Entry(myEntity).Property(e => e.MyProperty).IsModified = true; 
db.SaveChanges(); 

hoặc là bạn sẽ phải tự làm công việc thủ công.

0

Chắc chắn bạn có thể. Tôi cho rằng họ đã có trong mô hình của bạn, chỉ cần thêm chúng vào biểu mẫu với Html.HiddenFor(m => m.createdBy). Bây giờ họ đang ở trong các hình thức nhưng không được hiển thị, và vẫn có giá trị trên phương pháp Post.

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