2013-09-23 46 views
24

Trong ASP NET Web Forms của tôi, tôi có mã khai báo sau:Web Forms thông báo lỗi: "Đây không phải là scriptlet sẽ được xuất ra dưới dạng văn bản thuần"

<asp:TextBox runat="server" ID="txtbox" CssClass='<%=TEXTBOX_CSS_CLASS%>' /> 

Các TEXTBOX_CSS_CLASS liên tục được định nghĩa trong cơ sở lớp mà lớp mã-đằng sau của trang thừa hưởng từ:

public class MyPageBase : Page 
{ 
    protected internal const string TEXTBOX_CSS_CLASS = "myClass"; 
} 

Trình biên tập thời gian chỉnh sửa tuy nhiên cảnh báo rằng "Văn bản thuần tuý" sẽ xuất ra dưới dạng văn bản thuần túy ". Đúng với từ của nó, lớp css được hiển thị theo nghĩa đen là "<% = TEXTBOX_CSS_CLASS%>".

Thông báo lỗi này có ý nghĩa gì và có cách giải quyết nào để tôi vẫn có thể sử dụng hằng số trong lớp cơ sở không?

Trả lời

27

Bạn không thể sử dụng <%= ... %> để thiết lập thuộc tính của điều khiển phía máy chủ. Biểu thức nội tuyến <% %> chỉ có thể được sử dụng tại trang aspx hoặc cấp tài liệu hàng đầu của điều khiển người dùng, nhưng không thể được nhúng trong thuộc tính thẻ của điều khiển máy chủ (chẳng hạn như <asp:Button... Text =<% %> ..>).

Nếu TextBox của bạn nằm trong các điều khiển DataBound như GridView, ListView .. bạn có thể sử dụng: cú pháp <%# %>. HOẶC bạn có thể gọi rõ ràng DataBind() trên điều khiển từ mã lệnh phía sau hoặc tập lệnh máy chủ nội dòng.

<asp:TextBox runat="server" ID="txtbox" class='<%# TEXTBOX_CSS_CLASS %>' /> 

// đang Đằng sau tập

protected void Page_Load(object sender, EventArgs e) 
{  
     txtbox.DataBind(); 
} 

ASP.NET bao gồm vài built-in xây dựng biểu thức cho phép bạn trích xuất các thiết lập ứng dụng tùy chỉnh và chuỗi kết nối thông tin từ tập tin web.config. Ví dụ:

  • Tài
  • connectionStrings
  • AppSettings

Vì vậy, nếu bạn muốn lấy một thiết lập ứng dụng có tên className từ phần <appSettings> của tập tin web.config, bạn có thể sử dụng các biểu thức sau đây :

<asp:TextBox runat="server" Text="<%$ AppSettings:className %>" /> 

Tuy nhiên, đoạn mã trên không phải là tiêu chuẩn để đọc tên lớp từ Appsettings.

Bạn có thể xây dựng và sử dụng một trong hai tùy chỉnh của riêng bạn ExpressionBuilders hoặc Sử dụng mã đằng sau như:

txtbox.CssClass = TEXTBOX_CSS_CLASS; 

Check this link vào việc xây dựng các nhà xây dựng Tuỳ chỉnh biểu. Khi bạn tạo Biểu thức tùy chỉnh, bạn có thể hiển thị giá trị như:

<asp:TextBox Text="<%$ SetValue:SomeParamName %>" 
    ID="setting" 
    runat="server" /> 
14

Sự cố là bạn không thể kết hợp các điều khiển runat=server với các khối mã <%= .. %>. Cách chính xác sẽ là sử dụng mã phía sau: txtbox.CssClass = TEXTBOX_CSS_CLASS;.

7

Điều này sẽ hiệu quả.

Đánh dấu lên

<asp:TextBox runat="server" ID="txtbox" class='<%# TEXTBOX_CSS_CLASS %>' /> 

Mã-đằng sau

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     txtbox.DataBind(); 
    } 
} 

Nhưng rất nhiều của nó sạch hơn để truy cập CssClass tài sản của asp:TextBox trên Page_Load

+0

cú pháp <% # lạ đến từ đâu? – spankmaster79

+1

@ spankmaster79: chỉ cần đọc câu trả lời ở trên để có giải thích chi tiết. – naveen