2013-08-13 31 views
6

Tôi đang xây dựng Trình trợ giúp Html trong MVC 4 và tôi muốn biết cách tạo thẻ/html trong trình trợ giúp html đúng cách.Xây dựng Html trong Trình trợ giúp Html bằng Trình tạo dao cạo hoặc Trình tạo thẻ?

Ví dụ ở đây là helper html đơn giản mà tạo thẻ hình ảnh sử dụng TagBuilder lớp:

public static MvcHtmlString Image(this HtmlHelper html, string imagePath, 
    string title = null, string alt = null) 
{ 
    var img = new TagBuilder("img"); 
    img.MergeAttribute("src", imagePath); 
    if (title != null) img.MergeAttribute("title", title); 
    if (alt != null) img.MergeAttribute("alt", alt); 

    return MvcHtmlString.Create(img.ToString(TagRenderMode.SelfClosing)); 
} 

Từ phía khác tôi có thể làm một cái gì đó như thế này:

// C#: 
public static MvcHtmlString Image(this HtmlHelper html, string imagePath, 
    string title = null, string alt = null) 
{ 
    var model = new SomeModel() { 
     Path = imagePath, 
     Title = title, 
     Alt = alt 
    }; 

    return MvcHtmlString.Create(Razor.Parse("sometemplate.cshtml", model)); 
} 

// cshtml: 
<img src="@model.Path" title="@model.Title" alt="@model.Alt" /> 

Đó là giải pháp tốt hơn?

Trả lời

3

Cả hai đều hợp lệ, tôi sẽ nghi ngờ điều sau sẽ chậm hơn nhiều và tôi đang cố gắng xem những lợi ích nào sẽ có khi sử dụng Chế độ xem một phần.

Quy tắc chung của tôi là HtmlHelpers chỉ nên được sử dụng để đánh dấu đơn giản; bất cứ điều gì phức tạp hơn nên được sử dụng một phần xem và hành động trẻ em.

+0

Tôi hỏi câu hỏi này bởi vì tôi có helper rất phức tạp mà xây dựng một bảng. Để xây dựng bảng tôi sử dụng số lượng lớn các thẻ vì vậy tôi muốn biết nếu nó sẽ chậm hơn nhiều hoặc chậm hơn vì nó rất có thể giúp tôi. –

+0

Tôi đã đặt câu hỏi đó vào việc xây dựng HTML cho một bảng phức tạp hơn ví dụ của bạn. Để xây dựng bảng, bạn nên xem xét trợ giúp Grid của MvcContrib - http://mvccontrib.codeplex.com/wikipage?title=Grid hoặc tại WebGrid trong System.Web.Helpers - http://msdn.microsoft.com/vi -us/magazine/hh288075.aspx. Tôi sẽ không tái tạo lại bánh xe :) –

+0

Tôi cũng nghĩ thế nhưng đó không phải là thứ tôi cần. Tôi không hiển thị dữ liệu từ DB hoặc một cái gì đó như thế này ... Vì vậy, bạn có thể vui lòng giúp tôi có được câu trả lời đúng cho câu hỏi của tôi? –

0

Phương thức đầu tiên hoạt động trên các chuỗi trong bộ nhớ và đang thực hiện, phương thức thứ hai tốn kém hơn về tài nguyên và tạo quyền truy cập tệp.

+0

Tôi biết sự khác biệt nhưng tôi muốn biết những tình huống tôi nên perefer 'TagBuilder' và những tình huống tôi nên perefer' Razor.Parse' –

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