2009-02-17 36 views
8

Tôi không thể tìm ra lý do tại sao điều này không hoạt động bên dưới. Tôi cần phải ràng buộc hộp văn bản với một giá trị từ một biểu thức nội tuyến. Có vẻ như một điều đơn giản đúng không? Nhưng không phải công việc này. Bất kỳ ý tưởng? Cảm ơn trước.ASP.net Inline Expression Issue

<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' /> 
<asp:textbox id="tbName" runat="server" Text='<%= "test" %>' /> 

Chỉnh sửa: Tôi nên đề cập đến trang này không có mã phía sau và chỉ các chỉ thị sau ở trên cùng.

<%@ Import Namespace="System" %> 
<%@ Import Namespace="System.Web" %> 
<%@ Page Language="C#" %> 

Edit:

Các giải pháp khả thi duy nhất mà tôi có thể đưa ra ngắn thêm một mã số đằng sau là thêm một kịch bản máy chủ nội tuyến, như thế này. Tôi muốn tôi biết lý do tại sao các biểu thức nội tuyến sẽ không hoạt động trừ khi bạn đang ở trong một bối cảnh ràng buộc dữ liệu.

<script language="C#" runat="server"> 
    private void Page_Load(object sender, System.EventArgs e) 
    { 
     tbName.Text = "test"; 
    } 
</script> 

Trả lời

14

Trong Page_Load của bạn sẽ phải thực hiện một cuộc gọi đến trang .DataBind() cho

<asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' /> 

để hoạt động.

<% =%> là một đáp ứng rút gọn.Write() và không bao giờ hợp lệ dưới dạng thuộc tính, cho bất kỳ thẻ máy chủ nào.

<% #%> có thể được sử dụng, chỉ khi conatainer là databound (trang trong trường hợp của bạn).

<% $%> có thể được sử dụng để truy cập dữ liệu trong tệp tài nguyên.

EDIT: Bạn cũng có thể xem How to 'bind' Text property of a label in markup là một câu hỏi không giống nhau.

1
<asp:textbox id="tbName" runat="server"><%="test"%></asp:textbox> 
+0

Không làm việc tôi chỉ nhận được "Mã khối không được hỗ trợ trong bối cảnh này.". Tôi nên đề cập rằng trang của tôi không có mã phía sau, tôi không chắc chắn rằng vấn đề. – James

2

Hãy thử thêm runat = "server" đến các yếu tố máy chủ. Nếu không, phần tử này sẽ không được xử lý tại máy chủ.

EDIT: Trên thực tế, "chính xác" của nó là điều này không hoạt động; đang <% = ...%> không thể được đánh giá trong một thẻ máy chủ, chỉ có biểu hiện như ví dụ <% $ Resources: h1%>

+0

Xin lỗi đó là một lỗi đánh máy trên một phần của tôi các điều khiển được thiết lập để runat = máy chủ và nó vẫn không hoạt động. – James

2

Bạn có thể cần không gian tên cho điều khiển textbox

<%@ Import "System.Web.UI.WebControls" %> 
+0

Đã thử rằng, và vẫn không có may mắn. – James

+0

bạn cũng có thể dùng thử System.Web.UI. Đó là nơi hàm Eval được định nghĩa. – Nick

5

Như đã nêu, <% =%> là bất hợp pháp ở bất cứ nơi nào trong một khai báo kiểm soát máy chủ, ngoại trừ việc đánh dấu bên trong đang được phân tích cú pháp như nội dung (ví dụ: < ItemTemplate> trong một Repeater).

<% #%> hợp lệ như một biểu thức cho thuộc tính kiểm soát, vì các biểu thức này sẽ được đánh giá khi DataBind() được gọi trên điều khiển.

Việc sử dụng Eval() của bạn có vẻ hơi nghi ngờ. Mỗi ví dụ, Eval() sẽ sử dụng đối tượng Page hiện tại làm bối cảnh ràng buộc, có nghĩa là giá trị của thuộc tính công khai có tên là "test" sẽ bị ràng buộc khi DataBind() được gọi. Trừ khi bạn thực sự có thuộc tính này được định nghĩa trên lớp Page, biểu thức sẽ không bao giờ đánh giá bất cứ thứ gì. Đánh giá() được sử dụng chủ yếu trong các biểu thức trong các điều khiển như Repeater, GridView, ListView, vv, trong đó có một danh sách các mục dữ liệu bị ràng buộc bằng cách sử dụng các mẫu, và bạn cần một phương thức để có thể truy cập các thuộc tính của mục dữ liệu hiện tại. Đối với tất cả các điều khiển khác, chỉ cần sử dụng các biểu thức mã thông thường bên trong biểu thức ràng buộc dữ liệu - nó nhanh hơn nhiều và trực quan hơn so với Eval(), dựa trên phản xạ thời gian chạy.

Nếu bạn muốn có một sự thay thế thông minh hơn bằng cách sử <% $%> cú pháp mà tránh liên kết dữ liệu hoàn toàn, hãy vào đây:

http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx

4

Sử dụng <asp:textbox id="tbName" runat="server" Text='<%# Eval("test") %>' />

và thiết lập tbName.DataBind(); trong trường hợp tải trang.

Đối với những người đang tìm kiếm thêm thông tin về biểu thức nội dòng, hãy tham khảo các liên kết sau.

ASP.net có sau inline expressions