2009-08-15 20 views
6

Khi bạn sử dụng Html.RenderPartial sẽ lấy tên của chế độ xem bạn muốn hiển thị và hiển thị nội dung đó ở địa điểm đó.Trình trợ giúp Html, RenderPartial, hoạt động như thế nào? Làm cách nào để tôi có thể triển khai trình trợ giúp có thể mang nội dung từ một chế độ xem một phần?

Tôi muốn thực hiện điều gì đó tương tự. Tôi muốn nó để lấy tên của độ xem bạn muốn để render, cùng với một số biến khác, và đưa ra các nội dung trong một container ..

Ví dụ:

public static class WindowHelper 
{ 
    public static string Window(this HtmlHelper helper, string name, string viewName) 
    { 
     var sb = new StringBuilder(); 

     sb.Append("<div id='" + name + "_Window' class='window'>"); 
     //Add the contents of the partial view to the string builder. 
     sb.Append("</div>"); 

     return sb.ToString(); 
    } 
} 

Bất cứ ai cũng biết làm thế nào để làm điều này?

Trả lời

8

Tiện ích RenderPartial được lập trình để hiển thị trực tiếp đối tượng Phản hồi ... bạn có thể thấy điều này trong mã nguồn cho chúng:

....).Render(viewContext, this.ViewContext.HttpContext.Response.Output); 

Điều này có nghĩa là nếu bạn thay đổi cách tiếp cận của mình một chút, bạn có thể hoàn thành những gì bạn muốn. Thay vì phụ thêm tất cả mọi thứ vào một StringBuilder, bạn có thể làm một cái gì đó như thế này:

using System.Web.Mvc.Html; 

public static class WindowHelper 
{ 
    public static void Window(this HtmlHelper helper, string name, string viewName) 
    { 
     var response = helper.ViewContext.HttpContext.Response; 
     response.Write("<div id='" + name + "_Window' class='window'>"); 

     //Add the contents of the partial view to the string builder. 
     helper.RenderPartial(viewName); 

     response.Write("</div>"); 
    } 
} 

Lưu ý rằng trong đó có System.Web.Mvc.Html cho phép bạn truy cập vào các phương pháp renderPartial().

0

Tại sao không tạo một cái nhìn thứ hai và có một phần bên trong đó, vượt qua từ tên chính thức ViewData hoặc trong mô hình vv ..

Cái gì như:

<div id='<%= ViewData["Name"] + "_Window"%>' class='window'> 
    <% Html.RenderPartial(ViewData["Name"]); %> 
</div> 

Hy vọng rằng sẽ giúp, Dan

8

Chúng tôi đang sửa lỗi này trong MVC 2. Bạn sẽ có thể gọi Html.Partial() và nhận nội dung thực tế của chế độ xem dưới dạng chuỗi.

+0

Tốt. - - – womp

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