2013-04-15 22 views
6

Tôi biết rằng bạn sử dụng dấu gạch dưới cho thuộc tính dữ liệu với dấu gạch ngang ("data_bind" thay vì "liên kết dữ liệu", trong đối tượng) và chúng tự động được thay thế bằng dấu gạch nối. Nhưng tôi đã gặp phải vấn đề mà bạn không thể thực hiện "gạch dưới" này, nếu thuộc tính kết thúc bằng "tên". Vì vậy, tôi đã cố gắng cả hai, nhưng không phải công việc:Không thể sử dụng thuộc tính dữ liệu kết thúc bằng "tên"?

@Html.TextBoxFor(model => model.Street, new { data_encrypted_name = "street" }) 

@Html.TextBoxFor(model => model.Street, new { @data_encrypted_name = "street" }) 

Khi tôi xem HTML được tạo ra, đối với cả hai trường hợp trên, nó tạo ra:

<input data-encrypted- id="ViewModel_Street" name="ViewModel.Street" type="text" value="" /> 

Lúc đầu, tôi nghĩ sức mạnh này có cái gì để làm với nhiều dấu gạch/dấu gạch nối, nhưng tôi đã cố gắng thêm hai trường hợp thử nghiệm, để xem những gì sẽ xảy ra, và cả hai đều chỉ làm việc tốt:

@Html.TextBoxFor(model => model.Street, new { data_encrypted_namme = "street" }) 

@Html.TextBoxFor(model => model.Street, new { data_name_encrypted = "street" }) 

Vì vậy, vấn đề này chắc chắn liên quan đến việc có "tên "ở cuối thuộc tính.

Tôi đang làm điều gì đó sai hoặc thiếu một cái gì đó, hoặc là một lỗi trong cách .NET chuyển đổi các thuộc tính?

(Để làm rõ, chúng tôi sử dụng Braintree Thanh toán, và họ đòi hỏi việc sử dụng các "dữ liệu được mã hóa-name" thuộc tính trên đầu vào nhất định, vì vậy chúng tôi không thể chỉ chọn một tên thuộc tính.)

+0

Vì 'tên' là thuộc tính HTML hợp lệ, có thể gây ra sự cố của bạn ..? – tier1

+1

Hmm, tốt, dọc theo dòng ý tưởng đó, tôi đã thử data_encrypted_id và data_encrypted_class, nhưng cả hai đều hoạt động như mong đợi. Vì vậy, nó vẫn có vẻ trực tiếp liên quan đến "tên" ở cuối. Cảm ơn những suy nghĩ! –

+1

Giống như một FYI, tôi không thể xác nhận hành vi này, VS2012, MVC4, tệp cshtml trên trình trợ giúp Html.TextboxFor. @ Html.TextBoxFor (x => x.TrapNumber, new {data_encrypted_name = "Test"}) hiển thị thích hợp cho tôi. . Ngoài ra thử nghiệm trên TextArea không có vấn đề. Tôi biết điều này không giải quyết hành vi của bạn, nhưng muốn cung cấp cho cái nhìn sâu sắc trong đó nó không xuất hiện để được một khuôn khổ 'lỗi' với tôi ... – Tommy

Trả lời

2

Nhờ Tommy để kiểm tra hành vi mà tôi mô tả và tìm thấy nó không phải là lỗi cho mọi người.

Sau khi Tommy viết bài này, tôi đã xem Trợ giúp chúng tôi đang sử dụng. Tôi nhận ra rằng chúng tôi đã thực sự sử dụng một phương pháp Extension gọi là "NameLessTextBoxFor" (mà chúng tôi tìm thấy ở đây: How to extend html.textboxfor to remove the name attribute?), loại bỏ các thuộc tính name="" từ đầu vào trước khi hiển thị nó. Tôi nên xác nhận điều này trước khi đăng, nhưng không nhận ra nó có thể ảnh hưởng đến các thuộc tính HTML được chuyển vào nó.

Và lo lắng, như bạn có thể mong đợi, chức năng của phương pháp này cũng đã cắt bất kỳ thuộc tính nào có chứa name="". Nó đã làm một tìm kiếm rất đơn giản và thay thế trên văn bản đó và loại bỏ nó. Đó là vấn đề ở đây.

Cảm ơn bạn đã dành thời gian và sự chú ý đến vấn đề này và xin lỗi tôi đã không tự mình nắm bắt được điều này.

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