2012-05-04 64 views
6

Tôi đang sử dụng kiểu nhập mạnh mẽ cho chế độ xem của mình. Tôi có một hộp văn bản bị vô hiệu hóa có giá trị tôi cập nhật bằng javascript. Hộp văn bản được hiển thị bằng cách sử dụng số nàyhộp văn bản bị vô hiệu hóa asp.net mvc được cập nhật bởi javascript không đăng giá trị mới

<%: Html.TextBoxFor(model => model.TotalAmount, new { disabled = "disabled"})%> 

Điều này sẽ hiển thị hộp văn bản với NAME và ID là 'TotalAmount'. TotalAmount cũng là thuộc tính trên mô hình của tôi liên kết với chế độ xem này.

Các javascript để cập nhật giá trị của nó trong giao diện là như thế này trong chức năng của nó:

document.getElementById('TotalAmount').value = {assigning new value here}; 

Chức năng không được gọi và tôi có thể nhìn thấy giá trị trong hộp văn bản vô hiệu hóa khi tôi thay đổi một số giá trị trong có thể chỉnh sửa khác hộp văn bản. Tuy nhiên, khi tôi gửi đơn này đến phương pháp hành động của tôi như sau:

[HttpPost] 
public ActionResult Process (ProcessVM FormPostVM) 
{ 
} 

người khuyết tật tài sản textbox [TotalAmount] vẫn có giá trị cũ nhưng textbox có thể chỉnh sửa mà tôi sửa đổi chứa các giá trị mới tôi bước vào. Tại sao hộp văn bản bị vô hiệu hóa không chứa giá trị được cập nhật javascript?

tôi đã cố gắng sử dụng

ModelState.Remove("TotalAmount"); 

trong phương pháp hành động trên, nhưng như tôi đã hình dung nó đã không làm việc.

Bất kỳ manh mối, mẹo nào?

Cảm ơn thời gian của bạn .... yếu tố đầu vào

+0

4 câu trả lời trong một phút và tất cả chúng đều đúng. – tkt986

Trả lời

23

HTML như textbox có thuộc tính disabled="disabled" sẽ không bao giờ gửi các giá trị của họ đến máy chủ khi biểu mẫu được gửi. Nếu bạn muốn gửi giá trị đến máy chủ trong khi vẫn vô hiệu hóa người dùng từ việc thay đổi nó, bạn có thể làm cho textbox readonly:

<%= Html.TextBoxFor(model => model.TotalAmount, new { @readonly = "readonly" }) %> 
+0

+1 ví dụ về cách đặt chỉ đọc – user20358

+0

@ Dimitrov, bạn nói "... sẽ không bao giờ gửi giá trị của chúng đến máy chủ ...". Đây có phải là quy tắc chung hoặc MVC cụ thể không? Ngoài ra giải pháp của bạn là dành cho hộp văn bản. Điều gì về 'chọn' yếu tố? –

+0

@Anar, điều này không liên quan gì đến ASP.NET MVC. Đó là HTML cơ bản. Và nó là đúng cho tất cả các yếu tố đầu vào bao gồm 'select'. –

3

Nếu bạn thay đổi nó để sử dụng readonly hơn disabled, thì đây sẽ cho bạn cùng chức năng, nhưng đăng giá trị.

4

đầu vào Disabled không bao giờ được gửi trong một hình thức gửi, hãy thử sử dụng readonly thuộc tính thay vì hoặc đầu vào ẩn

4

lĩnh vực khuyết tật không được đăng. Hãy thử có một trường biểu mẫu ẩn sẽ gửi giá trị đến máy chủ và đặt cả hai trường TotalAmount và trường biểu mẫu ẩn. Trên máy chủ, hãy sử dụng giá trị cho trường ẩn thay thế.

Một lưu ý phụ, vì điều này trông giống như tổng số đơn đặt hàng, đây là điều tôi sẽ đánh giá lại trên máy chủ thay vì mở ra khả năng ai đó hack html và nhận được giảm giá trên sản phẩm của họ.

CHỈNH SỬA: Đến các điểm khác, tôi đã quên thuộc tính chỉ đọc. Điều đó cũng sẽ hoạt động.

+0

+1 dành cho mẹo bảo mật – user20358

1

Trình duyệt không đăng lại giá trị trong các điều khiển nhập bị tắt, như bạn đã phát hiện. Có lẽ cách dễ nhất để giải quyết vấn đề này là móc vào biểu mẫu gửi và kích hoạt lại đầu vào khi biểu mẫu đang được gửi; người dùng sẽ không có cơ hội chỉnh sửa giá trị và nó sẽ được đăng với phần còn lại của yêu cầu.

tôi nghĩ rằng vấn đề cuối cùng mô tả nó: xin vui lòng kiểm tra xem nó ra:

Retrieving the value of a asp:TextBox

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