Tôi có một điều khiển người dùng mà tôi sử dụng trên nhiều trang để hiển thị thông tin về một đối tượng. Bất cứ khi nào tôi cần phải sử dụng điều này usercontrol, tôi gọi một phương pháp gọi là Hiển thị (trên usercontrol) và vượt qua trong một số giá trị.Thiết lập thuộc tính trên điều khiển người dùng bên trong vòng lặp foreach
public void Display(string name, List<Items> items)
{
// Set a few protected properties so I can display values from the aspx page
}
Điều này làm việc tốt, nhưng bây giờ tôi cần sử dụng điều khiển này trong vòng lặp foreach trong trang aspx.
<% foreach (var c in Categories) { %>
<uc:ItemsControl runat="server"/>
<% } %>
Đối tượng danh mục có phương pháp và thuộc tính mà tôi sẽ chuyển vào phương pháp Hiển thị. Vì vậy, làm thế nào tôi sẽ thiết lập các giá trị đúng cách?
tôi đã cố gắng làm cho tài sản trên các công điều khiển người dùng và chỉ cần thiết lập chúng theo cách này:
<uc:ItemsControl Items="<%# c.Items %>"
OtherProperty="<%# c.GetProperty() %>"
runat="server"/>
này không làm việc, bởi vì các thuộc tính nhận được gửi đi trong là trống rỗng. Nếu tôi sử dụng <% = sau đó nó không hoạt động và thực sự ném một lỗi vì nó không nhận ra 'c' (trừ khi tôi cất cánh runat = "server" thì nó sẽ biên dịch ít nhất, nó vẫn không hoạt động .
cách thích hợp để làm điều này là gì
Edit:?. Ngoài ra, một điều khiển lặp có thể làm cho dễ dàng hơn này cho databinding, nhưng tôi muốn tránh việc sử dụng bất kỳ điều khiển .NET
Bộ lặp lại có thể là cách thích hợp, nhưng chúng tôi cố gắng tránh sử dụng các điều khiển .NET bất cứ khi nào có thể và thích đi với việc tạo HTML. – Brandon
Vâng, tôi cũng vậy-- Tôi cũng tìm thấy cách tiếp cận vòng lặp-emit-HTML đơn giản hơn nhiều. Đó là lý do tại sao tôi thích ASP.NET MVC. Nhưng với các biểu mẫu Web, nếu bạn đã sử dụng các điều khiển tùy chỉnh của riêng bạn và cần đưa các thuộc tính của chúng, đặc biệt là trong một vòng lặp, sử dụng ràng buộc dữ liệu là cách dễ nhất để đi. Trong tò mò, tại sao tránh điều khiển tích hợp của asp.net? Đây có phải là mối quan tâm liên quan đến hiệu suất hay thứ gì khác không? Việc kiểm soát lặp lại là * rất * xương trần và nhanh chóng - và không gây ra hiện tượng quang tuyến hay các vết nứt khác như thế. Bộ lặp có thể hoạt động giống như một vòng lặp foreach giả mạo như một điều khiển. –
Đó là một mối quan tâm nhất quán/hiệu suất. Sếp của tôi ban đầu tránh xa việc có các điều khiển .NET trong dự án vì các điều khiển/AjaxToolKit quá nặng nề cho những gì chúng ta cần, do đó, một cách tiếp cận HTML/jQuery thuần túy đã được thực hiện. Nếu thất bại, tôi có thể ném vào một bộ lặp đơn, tôi chỉ tự hỏi liệu có cách nào để làm điều này bằng cách sử dụng đường dẫn mà chúng ta đã bắt đầu. – Brandon