2012-11-07 27 views
6

Tôi đã bit sau đây trong quan điểm của tôi:HTML.TextBoxFor tàn tật không đi qua giá trị

@Html.TextBoxFor(model => model.PersonnelId, new { disabled = "disabled" }) 

Trong điều khiển của tôi, tôi đã này:

if (ModelState.IsValid) 
{ 
    PersonnelFacade.SavePerson(person); 
    return RedirectToAction("Index"); 
} 

Bây giờ khi tôi kiểm tra person.PersonnelId nó là trống. Khi tôi xóa {disabled = "disabled"} nó hoạt động tốt nhưng sau đó tôi có thể thay đổi PersonnelId mà không phải là những gì tôi muốn làm.

Tôi đang làm gì sai?

+0

Bạn có thể sử dụng '+' HiddenFor' DisplayFor' thay vào đó, hoặc chỉ cần thêm 'HiddenFor' với những gì bạn đã có. Dù sao, nó không có ý nghĩa để dựa vào loại bảo vệ này ở cấp trình duyệt. Bất kỳ ai cũng có thể gửi truy vấn POST giả mạo với 'PersonnelID' đã thay đổi thành thứ họ muốn. – GSerg

+0

Cả hai tính năng này đều không có chức năng tương tự như hộp văn bản bị vô hiệu hóa? – Liam

+0

Trong mẫu của tôi, tôi đang sử dụng nó với PersonnelId. Nhưng tôi muốn sử dụng tương tự cho CreationDate, vì vậy người dùng có thể nhìn thấy khi người được tạo hoặc ModificationDate hiển thị khi thay đổi cuối cùng được thực hiện. DisplayFor không vượt qua giá trị. Đối với HiddenFor, tôi có thể sử dụng cho PersonnelId, vì bạn không thực sự phải nhìn thấy nó. Nhưng tôi không thể sử dụng nó cho CreationDate hoặc ModificationDate, vì chúng sẽ được hiển thị. –

Trả lời

5

Thay vào đó, hãy thử đọc chỉ đọc.

@Html.TextBoxFor(model => model.PersonnelId, new { readonly= "readonly" }) 
+1

"Chỉ đọc" hoạt động ok, ngoại trừ hộp văn bản vẫn được bật. Khi tôi thêm "vô hiệu hóa", nó sẽ mất giá trị một lần nữa. –

9

Hãy thử 2 giá trị

  1. PersonnelIdForDisplay
  2. PersonnelId

Sau đó, trên quan điểm của bạn

  1. @ Html.TextBoxFor (mô hình => model.PersonnelIdForDisplay, mới {disabled = "disabled"})
  2. @ Html.HiddenFor (p => p.PersonnelId)
+0

cảm ơn .. nó trở nên hữu ích cho tôi .. –

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