2009-03-04 30 views
12

Tôi muốn đặt trạng thái đã bật của nút làm phủ định giá trị.Tôi có thể từ chối giá trị trong thuộc tính sử dụng "Đánh giá" không?

Vì vậy, cho mã này:

<asp:CheckBox ID="DefaultChecked" 
       Checked='<%# Bind("IsDefaultMessage") %>' 
       Enabled="false" 
       runat="server" /> 

<asp:LinkButton ID="MakeDefaultButton" 
       runat="server" 
       CommandName="MakeDefault' 
       CommandArgument='<%# Bind("ResidentialInfoID") %>' 
       Text="Make Default" /> 

Làm thế nào tôi có thể làm cho LinkButton Enabled thuộc tính false nếu IsDefaultMessage == true?

Trả lời

20

Sử dụng đánh giá thay vì ràng buộc. Ràng buộc là cho ràng buộc hai chiều, tức là đối với trường hợp bạn cần để có thể lưu dữ liệu trở lại nguồn dữ liệu của bạn.

Khi bạn sử dụng Bind, trang đã biên dịch sẽ thực sự tạo mã sử dụng Eval để đặt giá trị, cộng với một số mã để đọc giá trị để lưu. Bởi vì Bind được thay thế bằng mã được tạo ra, bạn không thể sử dụng bất kỳ logic bổ sung nào với Bind.

<asp:CheckBox ID="DefaultChecked" Checked='<%# !(bool)Eval("IsDefaultMessage") %>' Enabled="false" runat="server" /> 
<asp:LinkButton ID="MakeDefaultButton" runat="server" CommandName="MakeDefault' CommandArgument='<%#Bind("ResidentialInfoID") %>' Text="Make Default"/> 
-1

Khi tôi nhớ lại (Đã lâu rồi), không có phép thuật cụ thể trong <%#Bind(. Chỉ là #Bind( bên trong <% ....%>. Điều này có nghĩa là bạn muốn:

<% ! #Bind("IsDefaultMessage") %>' 
+0

điều này sẽ không hoạt động ... <%#...%> cho phép ASP.NET biết đó là diễn ra trong quá trình databinding ...! phải đi sau #. –

5

Nếu bạn có thể sử dụng Eval, nó chỉ là phương pháp của lớp Control. Nó chỉ đặc biệt ở chỗ nó cần phải ở trong bối cảnh của một khối dữ liệu bị ràng buộc <%# ... %>. Khác hơn thế, về cơ bản bạn có thể điều trị các khối giống như một khối <%= %> biểu thức chính quy:

<%# !(bool)Eval("IsDefaultMessage") %> 

Nếu bạn muốn vẫn Bind nó (Eval không phải là khứ hồi), hơn bạn sẽ cần phải phủ nhận nó trở lại và ra trong quá trình databinding. Bạn có thể không cần phải làm điều này mặc dù, nếu bạn chỉ có thể tái từ kiểm soát. Ví dụ: nếu hộp kiểm, thay vì gắn nhãn "Không phải là thông báo mặc định" cho người dùng và phủ nhận nó qua lại, thay vì cho phép "Thông báo mặc định". Ví dụ bị lôi cuốn, nhưng bạn có ý tưởng.

+0

Thao tác này sẽ phát ra lỗi "nút chỉ thị tiền xử lý không hợp lệ". Bất kỳ ý tưởng về cách giải quyết? – KevDog

+0

Ngoài ra, "Không thể áp dụng toán tử! Cho toán hạng của đối tượng kiểu" – KevDog

+0

Bạn đang đúng - Ràng buộc không thể được sử dụng như tôi đã có nó. Tôi chuyển nó sang Eval và mô tả cách giải quyết việc sử dụng Bind. –

1

Tôi chưa bao giờ sử dụng Bind nhưng hiểu biết của tôi là nó tương tự như Databinder.Eval. Dù bằng cách nào, cả hai phương thức trả về các đối tượng, do đó bạn cần phải đưa nó vào một boolean trước khi đánh giá nó.

<%# !Convert.ToBoolean(Bind("IsDefaultMessage") %> 

Chỉnh sửa: Có vẻ như không thể thực hiện được và sử dụng SqlDataSource trên trang sẽ giải quyết được sự cố. http://forums.asp.net/t/1009497.aspx.

+0

Điều này ném lỗi" Tên 'Bind' không tồn tại trong ngữ cảnh hiện tại " – KevDog

+0

Có lý do nào bạn muốn sử dụng Bind không? sử dụng DataBinder.Eval? <% #! Convert.ToBoolean (DataBinder.Eval (Container.DataItem, "IsDefaultMessage"))%> – rmw

+0

Đây là diễn đàn về vấn đề này: http://forums.asp.net/t/1009497 Bạn có thể thêm một SqlDataSource vào trang của bạn không? Có vẻ như nó có thể làm cho nó hoạt động. – rmw

-1

Checked='<%# Eval("IsDefaultMessage").ToString().Length() > 4 %>' 

sẽ trả về true nếu IsDefaultMessage là sai Kể từ khi "False" .Length = 5 và "True" .Length = 4

1

Trong trường hợp ai đó đang tìm kiếm một tùy chọn với VB.Net

<asp:CheckBox ID="DefaultChecked" Checked='<%# NOT (Eval("IsDefaultMessage")) %>' Enabled="false" runat="server" /> 
Các vấn đề liên quan