2011-12-12 23 views
6

Tôi có một biến trong mục.Name có chứa chuỗi "It's Tuesday!". Để giảm bớt lỗi javascript, trong trình điều khiển C# tôi đã thoát khỏi dấu nháy đơn này. Trên trang web, nó xuất hiện như thế này "It \ 's Tuesday!".Thoát báo giá đơn từ một MVC 3 Dao dao Xem biến

Điều này ít nhất là ngăn chặn bất kỳ lỗi javascript nào, tuy nhiên, tôi không muốn chuỗi thực tế được hiển thị để chứa dấu gạch chéo ngược đã thoát khỏi nó.

Làm cách nào tôi có thể hoàn nguyên quá trình thoát khi các lỗi javascript đã được xử lý? Điều này cảm thấy giống như một vấn đề khá đơn giản, nhưng tôi là một chút không quen thuộc với MVC 3. Bất kỳ gợi ý được nhiều đánh giá cao! Tìm kiếm của tôi không tìm thấy bất kỳ ví dụ cụ thể nào về điều này.

Một ví dụ về mã của tôi trong Razor View:

@foreach (var item in Model) 
{ 
    @Html.DisplayFor(modelItem => item.Name) // item.Name = "It\'s Tuesday!" 
} 
+0

Tại sao bạn thoát trước ký tự trích dẫn "để giảm bớt lỗi javascript" khi không có javascript trong ví dụ của bạn? –

+0

Đó là sự thật, không có javascript trong ví dụ của tôi. Ví dụ của tôi là một đoạn mã rất cơ bản để hiển thị như thế nào e chuỗi trong câu hỏi Tôi đang cố gắng để loại bỏ một dấu gạch chéo ngược từ được hiển thị trong Razor View. Có tất nhiên javascript trên trang của giải pháp thực tế. –

+0

trong khi tôi chắc chắn có javascript trên trang của bạn nó vẫn không có ý nghĩa với tôi tại sao bạn đang cố gắng để thoát khỏi một báo giá trong một chuỗi được dự định để được trả lại như HTML cho một nhãn. Tôi không thể hiểu tại sao bạn thoát nó ở đó. –

Trả lời

21

Tạo phương thức tiện ích mở rộng mà bạn có thể sử dụng hoặc chỉ cần mã hóa trực tiếp. Tôi sẽ không mã hóa trước khi nhìn nhận nó, trừ khi bạn có một tài sản riêng biệt trong viewmodel của bạn có nghĩa là cho này (không phải là một ý tưởng tồi()

Đây không phải là thử nghiệm nhưng một cái gì đó dọc theo những dòng

 

public static class HtmlExtensions 

{ 
    public static IHtmlString JavaScriptEncode(this HtmlHelper html, string item) 
    { 
     return new HtmlString(HttpUtility.JavaScriptStringEncode(item)); 
    } 
} 
 

Bạn sau đó bạn có thể gọi @ Html.JavaScriptEncode (yourProperty) từ chế độ xem hoặc chỉ cần tham chiếu tên thuộc tính được mã hóa của bạn

+0

Phương pháp này hoạt động rất tốt, cảm ơn bạn! Tôi chỉ cần thực hiện một phương thức mở rộng để gọi, và sau đó để cho phương thức loại bỏ các backspace. Mặc dù có lẽ không phải là cách tốt nhất xung quanh vấn đề này, nhưng nó đã làm được điều này trong khi vẫn làm hài lòng Javascript. –

10

Sau đây có thể được sử dụng để ngăn chặn mã hóa đầu ra một lần nữa. Điều này tuy nhiên dựa vào bạn đúng cách đối phó với nó cho mình.

MVCHTMLString

@MvcHtmlString.Create(yourString) 
+0

Tôi đã sử dụng kết hợp với phần mở rộng Phương pháp. Cảm ơn vì bài đăng của bạn! Rất tiếc, tôi chỉ có thể đánh dấu 1 câu trả lời là chính xác và tôi không thể thăng hạng do danh tiếng thấp. Thời gian của bạn được đánh giá cao tuy nhiên, cho bất cứ điều gì đó là giá trị! –

+0

Và tôi thực sự cần tăng cường :-) – RubbleFord

0

Tôi thích bày tỏ quan điểm của tôi câm. Do đó, tôi có một thuộc tính được gọi là 'Hiển thị' hoặc 'Tên hiển thị' đã xử lý việc thoát cho chế độ xem.

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