Hiển thị html được mã hóa bằng dao cạo


79

Tôi lưu trữ HTML được mã hóa trong cơ sở dữ liệu.

Cách duy nhất tôi có thể hiển thị nó một cách chính xác là:

<div class='content'>    
   @MvcHtmlString.Create(HttpUtility.HtmlDecode(Model.Content));
</div>

No thật la xâu xi. Có cách nào tốt hơn để làm điều này không?

Câu trả lời:


154

Thử cái này:

<div class='content'>    
   @Html.Raw(HttpUtility.HtmlDecode(Model.Content))
</div>

Cảm ơn! Điều này tốt hơn, nhưng vẫn không phải là những gì tôi đang tìm kiếm.
jani

8
Tôi đã thực hiện một phương pháp mở rộng theo ý tưởng này. @ Html.RawDecode (Model.Content)
jani

3
Chỉ cần tránh; cuối cùng
Giovanny Farto M.

Điều này hoạt động nhưng nó rất bẩn ... cuối cùng đã tạo ra một phương pháp Extention với cái bọc này, ai đó có thể giải thích tại sao .Raw không hoạt động được không?
Egli Becerra

48

Sử dụng Html.Raw(). Phil Haack đã đăng một hướng dẫn cú pháp hay tại http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx .

<div class='content'>
    @Html.Raw( Model.Content )
</div>

1
Cảm ơn vì đã trả lời. Nhưng tôi nghĩ Html.Raw () là 'hiển thị như nó vốn có, không mã hóa'. Vì vậy, nếu tôi sử dụng cái này, thì tôi không thể giải mã html của mình trước khi tôi lưu nó vào cơ sở dữ liệu. Vì vậy, nó sẽ hiển thị nội dung người dùng đã nhập mà không có bất kỳ kiểm tra 'bảo mật' nào. Vì vậy, tôi nghĩ đây không phải là giải pháp tốt nhất.
jani

9

điều này khá đơn giản:

HttpUtility.HtmlDecode(Model.Content)

Một giải pháp khác, bạn cũng có thể trả về một Chuỗi HTML, Razor sẽ xuất định dạng chính xác:

trong chính chế độ xem:

@Html.GetSomeHtml()

trong bộ điều khiển:

public static HtmlString GetSomeHtml()
{
    var Data = "abc<br/>123";
    return new HtmlString(Data);
}

8

Bạn cũng có thể đơn giản sử dụng HtmlStringlớp

    @(new HtmlString(Model.Content))

0

Tôi lưu trữ HTML được mã hóa trong cơ sở dữ liệu.

Bạn không nên lưu trữ dữ liệu được mã hóa html trong cơ sở dữ liệu. Chỉ cần lưu trữ ở dạng văn bản thuần túy (không được mã hóa) và chỉ hiển thị dữ liệu của bạn như thế này và html của bạn sẽ được mã hóa tự động:

<div class='content'>
    @Model.Content
</div>

0

Tôi vừa có một trường hợp khác để hiển thị dấu gạch chéo ngược \với Razor và Java Script.

Của tôi @Model.AreaNametrông giống như Name1 \ Name2 \ Name3 nên khi tôi hiển thị, tất cả các dấu gạch chéo ngược đều biến mất và tôi thấy Name1Name2Name3

Tôi đã tìm thấy giải pháp để khắc phục nó:

var areafullName =  JSON.parse("@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject(Model.AreaName)))");

Đừng quên thêm @using Newtonsoft.Jsonvào đầu chtmltrang.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.