2012-08-13 27 views
5

Tôi có một điều khiển web mà trông như thế nàysử dụng <%= %> hoặc <%# %> với runat = server trong ASP.NET

 
public class Foo : WebControl 
{ 
    [Bindable(true)] 
    [Category("Default")] 
    [DefaultValue("")] 
    [Localizable(true)] 
    public string Bar { get; set; } 

    protected override void Render(HtmlTextWriter output) 
    { 
    output.WriteLine(Bar); 
    } 
} 

Tôi muốn đặt webcontrol này trong trang aspx của tôi như vậy:

 
<cc1:Foo Bar="<%= Fa.La.La %>/otherstuff" runat="server" /> 

(rõ ràng là mã này được đơn giản hóa để hiển thị sự cố)

Trong phương thức Render của tôi biến Fa.La.La không được đánh giá. Nó đến ở dạng văn bản thô "<% = Fa.La.La%>" Làm cách nào để đánh giá nó?

Tôi không cụ thể cách các biến được truyền vào. Nếu các biến có thể được đánh giá nếu chúng được chuyển vào như <% # ...%>, hoạt động tốt. Vấn đề là tôi có một số biến phía máy chủ mà tôi muốn được đánh giá trước/trong khi phương thức Render() của tôi được gọi.

Điều duy nhất tôi có thể nghĩ là sử dụng regex để lấy nội dung của <% = ...%> và sử dụng sự phản chiếu hoặc điều gì đó, nhưng phải có cách thanh lịch hơn để thực hiện việc này.

Câu hỏi này khá giống với using server variables in a href <%= xx %> with runat=server, nhưng không hoàn toàn giống nhau vì không có câu trả lời nào hữu ích.

+0

Hãy thử sử dụng này Chú ý dấu nháy đơn và nháy kép Sự khác biệt. Tôi hy vọng nó có thể giải quyết vấn đề – Moons

Trả lời

2

Bạn phải sử dụng biểu thức ràng buộc <%# expr %>.

<cc1:Foo Bar='<%# String.Concat(Fa.La.La,"/otherstuff")%>' runat="server" /> 

và gọi DataBind() phương pháp ở mã sau.

public void page_load() 
{ 
    DataBind(); 
} 
+1

Để mở rộng câu trả lời này, bạn không thể làm điều gì đó như: Bar = "<% # Fa.La.La%>/otherstuff" Nó chỉ được hiển thị theo nghĩa đen. Biểu thức dữ liệu phải là điều duy nhất trong thuộc tính, ví dụ: Bar = '<% # String.Concat (Fa.La.La, "/ otherstuff")%>' Hơn nữa, các dấu ngoặc kép bên ngoài phải là duy nhất -quotes và dấu ngoặc kép bên trong phải là dấu ngoặc kép (giả sử C#, anyway). – mhenry1384

5

Vâng, trước tiên, bạn nên rõ ràng là khác biệt giữa hai thẻ. đây là một số điểm tôi đã đọc và sử dụng thực tế ..

  • Các <%= biểu thức được đánh giá tại thời điểm render
  • Các <%# biểu thức được đánh giá ở DataBind() thời gian và không được đánh giá ở tất cả nếu DataBind() là không được gọi. Các biểu thức
  • <%# có thể được sử dụng làm thuộc tính trong điều khiển phía máy chủ. Không thể hiển thị các biểu thức <%=.

đọc thêm nó vào MSDN Blog

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