2011-01-04 10 views
26

Với Razor View Engine, bất cứ lúc nào bạn xuất một chuỗi trực tiếp vào trang, nó được mã hóa HTML. ví dụ:Với Razor View Engine mới, HtmlHelpers của tôi có nên trả về chuỗi hoặc IHtmlString không?

@"<p>Hello World</p>" 

thực sự sẽ nhận được đầu ra cho các trang như:

&lt;p&gt;Hello World &lt;/p&gt; 

Trong đó sẽ hiển thị trong trình duyệt như:

<p> Hello World </p >

Đây là vấn đề mặc dù, khi tạo người trợ giúp Html, cho đến bây giờ, với công cụ xem aspx cũ tôi sẽ chỉ retu rn một chuỗi và xuất ra trình duyệt:

<%= Html.MyCoolHelperMethod(); %> 

Vì vậy, câu hỏi của tôi về cơ bản là vậy. Tôi làm điều này:

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) 
{ 
    return new helper.Raw("<p>Hello World</p>"); 
} 

trong trường hợp này tôi chỉ có thể làm điều này trong cshtml tôi:

@Html.MyCoolHelperMethod(); 

hay tôi làm điều này:

public static string MyCoolHelperMethod(this HtmlHelper helper) 
{ 
    return "<p>Hello World</p>"; 
} 

trong trường hợp mà tôi cần phải thực hiện công việc trong cshtml của tôi:

@Html.Raw(Html.MyCoolHelperMethod()); 

Rõ ràng là lần đầu tiên phê duyệt ach làm cho xem nhìn sạch hơn rất nhiều, nhưng tôi chỉ tự hỏi nếu mô hình phổ biến là trong thực tế cho người giúp đỡ để trở về một IHtmlString và tôi đã làm điều đó sai trong quá khứ.

+0

Xem xét điều này: http://stackoverflow.com/questions/2293357/what-is-an-mvchtmlstring-and-when-should-i-use-it Bạn nên trả lại IHtmlString – LukLed

Trả lời

38

Trong hầu hết các trường hợp, bạn phải trả lại phiên bản IHtmlString. Đó là mẫu tiếp theo là những người trợ giúp được xây dựng sẵn * và điều đó có nghĩa là người tiêu dùng của người trợ giúp không cần phải lo lắng về việc mã hóa quá mức hoặc quá mức.

Thay vì sử dụng chức năng Raw, bạn có thể chỉ cần trả lại phiên bản mới HtmlString.

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) { 
    return new HtmlString("<p>Hello World</p>"); 
} 

* Lưu ý rằng MVC 3 thực sự sử dụng MvcHtmlString như kiểu trả về của những người giúp đỡ mình nhưng đây là một sự hoan lại từ MVC 2 ngày. (Câu chuyện phức tạp, nhưng trong ngắn hạn, IHtmlString chỉ được giới thiệu trong .NET 4 và kể từ MVC 2 được hỗ trợ .NET 3.5 loại MvcHtmlString được giới thiệu là bước trung gian). Tất cả người trợ giúp nhắm mục tiêu MVC 3 trở lên phải trả lại IHtmlString.

+0

"Tất cả người trợ giúp nhắm mục tiêu MVC 3 và cao hơn nên trả về IHtmlString. " - chỉ là những gì tôi cần biết! –