2011-06-24 45 views
5

Tôi đã nhận thấy một lỗi khó chịu nhất (có thể) trong trình trợ giúp HTML TextAreaFor HTML của ASP.NET MVC. Vì lý do nào đó, trình trợ giúp HTML thêm một dòng mới trước bất kỳ nội dung nào trong vùng văn bản. Rõ ràng, điều này là để chống lại các vấn đề có thể có của nội dung của một cá nhân bắt đầu với một dòng mới trên mục đích, và trình duyệt bỏ qua nó theo spec.ASP.NET MVC Textarea HTML trợ giúp thêm dòng khi sử dụng AntiXssLibrary

Tuy nhiên, bằng cách thêm nó, tôi nhận được lỗi gây khó chịu hơn bây giờ trong tất cả các văn bản của tôi tự động có thêm dòng trước bất kỳ nội dung nào trên tải biểu mẫu (tức là nội dung này hiển thị trước bất kỳ nội dung nào trong trường của tôi: ) . Nó sẽ xuất hiện một cái gì đó là mã hóa "newline" trước khi nhổ nó ra.

Có ai có giải pháp cho việc này không? Tôi hy vọng rằng các hành vi nhằm mục đích là cho nó để in ra

<textarea> 
    Stuff</textarea> 

không phải là

<textarea>&#13;&#10;Stuff</textarea> 

tôi nhận được ...

Sửa Sau khi kiểm tra hơn nữa, nó xuất hiện điều này là do tôi sử dụng AntiXssLibrary để mã hóa thay vì HtmlEncoder mặc định. Tôi đang sử dụng phiên bản 4.0, và phương pháp lớp encoder của tôi trông như thế này:

protected override void HtmlEncode(string value, TextWriter output) 
    { 
     output.Write(Microsoft.Security.Application.Encoder.HtmlEncode(value)); 
    } 

Vì vậy, suy nghĩ của tôi được rằng kể từ khi lớp TagBuilder, được gọi là từ TextAreaHelper, HTML mã hóa các nội dung của thẻ, nó được giả định hành vi của bộ mã hóa HTML mặc định, nhưng AntiXssLibrary là kỹ lưỡng hơn, và do đó bạn thấy hành vi này?

+0

Tôi thử nghiệm này trên một trong những trang web MVC3 làm việc của chúng tôi và không thấy hành vi mà bạn mô tả . Có lẽ bạn có thể đăng thêm thông tin. – JasonG

+0

Điều này đánh tôi mỗi khi tôi bắt đầu một dự án mới. BTW, tôi chỉ thấy hành vi này với FireFox, không phải IE hoặc Chrome cho đến nay. – mxmissile

Trả lời

8

Sau khi thực hiện một số thao tác mã, tôi đã thấy rằng suy nghĩ của tôi là chính xác. HTML Helper MVC3 TextArea sử dụng lớp TagBuilder, và làm như sau:

tagBuilder.SetInnerText(Environment.NewLine + value); 

Như SetInnerText gọi HttpUtility.Encode về nội dung của các đối số được truyền cho nó, kết quả này trong bộ mã hóa mặc định được gọi là không chỉ trên thực tế VALUE, nhưng trên môi trường này.NewLine là tốt, có nghĩa là nếu bạn không sử dụng mặc định HtmlEncoder (như AntiXssLibrary thay vào đó), có thể có một số hành vi bất ngờ, như thế này.

Việc sửa chữa sẽ là để họ thay vì gọi:

tagBuilder.InnerHtml = Environment.NewLine + HttpUtility.Encode(value); 

Tôi đã đệ trình một báo cáo lỗi.

Trong lúc này, tôi đang thực hiện một sửa chữa javascript onLoad để loại bỏ các mã hóa vi phạm từ khắp nơi textareas:

$("textarea").each(function() { $(this).val($(this).val().trim()); }); 
+1

Cảm ơn điều này đã giúp tôi (+1) nhưng tôi phải thay đổi js thành $ ("textarea"). Each (function() {$ (this) .val ($. Trim ($ (this) .val()));}); để làm cho nó hoạt động trong ie8 (xem http://stackoverflow.com/questions/3439316/ie8-and-jquerys-trim) – Adam

+1

Bạn có một URL cho lỗi bạn đã gửi không? Tôi muốn theo dõi rằng vì cùng một vấn đề này đang ảnh hưởng đến chúng ta. – Jacob

+1

http: //aspnet.codeplex.com/workitem/8848 –

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