2012-04-26 42 views
21

Tôi đang tạo một Dự án MVC. Sử dụng MVC 4 và Razor. Sau khi xây dựng một số trang tôi đã tự hỏi: Sự khác nhau giữaSự khác biệt giữa MvcHtmlString.Create() và Html.Raw()

MvcHtmlString.Create() 

Html.Raw() 

Sẽ được tốt đẹp nếu bạn có thể giúp tôi ở đây để hiểu đó là những gì.

Cảm ơn trước!

Trả lời

21

Đây là cơ hội tuyệt vời để xem mã nguồn có sẵn cho chúng tôi cho ASP.NET (http://aspnetwebstack.codeplex.com).

Nhìn vào HtmlHelper.cs, đây là mã cho Html.Raw():

public IHtmlString Raw(string value) 
{ 
    return new HtmlString(value); 
} 

public IHtmlString Raw(object value) 
{ 
    return new HtmlString(value == null ? null : value.ToString()); 
} 

Và đây là mã cho lớp MvcHtmlString:

namespace System.Web.Mvc 
{ 
    public sealed class MvcHtmlString : HtmlString 
    { 
     [SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes", Justification = "MvcHtmlString is immutable")] 
     public static readonly MvcHtmlString Empty = Create(String.Empty); 

     private readonly string _value; 

     public MvcHtmlString(string value) 
      : base(value ?? String.Empty) 
     { 
      _value = value ?? String.Empty; 
     } 

     public static MvcHtmlString Create(string value) 
     { 
      return new MvcHtmlString(value); 
     } 

     public static bool IsNullOrEmpty(MvcHtmlString value) 
     { 
      return (value == null || value._value.Length == 0); 
     } 
    } 
} 

Sự khác biệt lớn nhất là Html.Raw() chấp nhận bất kỳ đối tượng, trong khi MvcHtmlString.Create() chỉ chấp nhận chuỗi. Ngoài ra, Html.Raw() trả về một giao diện, trong khi phương thức Tạo trả về một đối tượng MvcHtmlString. Cuối cùng, Tạo giao dịch với null khác nhau.

+0

Cảm ơn bạn đã trả lời! Nhưng cái nào trong số này nên được preffered? – Julian

+2

@Julian: Điều đó tùy thuộc vào nơi mã và những gì bạn dễ dàng truy cập. Ususally tôi sử dụng không, tôi chỉ sử dụng 'mới HtmlString()'. – Guffa

+1

@Julian Giống như Guffa nói: Nó phụ thuộc vào mã của bạn ở đâu. Trong một cái nhìn tôi thích Html.Raw, nhưng chủ yếu là vì đó là esthetically lòng khi đọc mã (không phải là một đối số thực sự tốt, tôi biết). –

5

Không có sự khác biệt thực tế.

Các MvcHtmlString.Create tạo ra một thể hiện của MvcHtmlString, trong khi phương pháp Html.Raw tạo ra một thể hiện của HtmlString, nhưng MvcHtmlString chỉ được thừa hưởng từ HtmlString, vì vậy họ làm việc như nhau.

+0

Chỉ cần một câu hỏi: Msdn nói cho Html.Raw(): Trả về đánh dấu không được mã hóa HTML./cho MvcHtmlString.Create: Tạo chuỗi được mã hóa HTML bằng cách sử dụng giá trị văn bản được chỉ định. Vì vậy: Html được mã hóa/không mã hóa không tạo ra "sự khác biệt thực tế", hoặc tôi đã bỏ lỡ điều gì đó? –

+1

@ RaphaëlAlthaus: Kết quả chính xác giống nhau, nó chỉ được giải thích khác nhau. Việc gói một chuỗi trong một lớp thực hiện 'IHtmlString' bảo vệ chuỗi khỏi mã HTML khi bạn xuất nó bằng cách sử dụng thẻ máy chủ' <%: %> '. – Guffa

+0

Tôi đã bỏ lỡ điểm cuối cùng) Thx! –

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