2012-06-06 40 views
2

我感到羞愧,即時做錯事,我不知道它是什麼。 有人在這裏幫忙嗎?如果是這樣,提前致謝!用戶控件中的Eval繼承

我想從ASP用戶控件的GAC中的繼承代碼中讀取一個屬性。在用戶控件代碼隱藏是:

namespace My.Name.Space 
{ 
    public class MyControl : UserControl 
    { 
     public String SomeString { get; set; } 
     public Boolean MyProperty 
     { 
      get 
      { 
       if (String.Equals(SomeString,"SomeValue")) 
        return true; 
       return false; 
      } 
     } 

     // other code 
    } 
} 

的ASCX看起來是這樣的:

<%@ Control ClassName="MyControl" Language="C#" Inherits="My.Name.Space.MyControl, MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxx" %> 
<asp:DropDownList runat="server" id="myId" Visible='<%# Eval("MyProperty") %>' /> 

控制是硬連線到一個ASPX頁面,但SomeString屬性是不是在ASPX設定! SomeString屬性設置在Aspx頁面的OnLoad中。

任何想法什麼是我的代碼錯了嗎? 再次感謝! (發生意外錯誤):

編輯我也試過<asp:Label Text='<% Eval("MyProperty") %>' />,同樣的錯誤

回答

1

Eval代碼塊與數據綁定控件一起使用,但也會在調用this.DataBind()時進行評估。

但是,您不需要使用Eval(實際上您不能使用用戶控件),因爲此構造被ASP.Net翻譯爲類似DataBinder.Eval(someObject, "SomePropertyOfAnObject")的東西,它需要someObject並通過反射獲取值SomePropertyOfAnObject財產。 DataBinding控件具有一個DataSource屬性,它是將要評估的對象的集合。用戶控件並非如此。

,您仍然可以使用<%# %>,但通過以下方式:

<asp:DropDownList runat="server" id="myId" Visible='<%# MyProperty %>' /> 

ASP .NET可以產生類似:

dataBindingExpressionBuilderTarget.Visible = ((bool)(MyProperty)); 

這意味着myProperty的,應至少保護,如果你今後會改變主意。

+0

該代碼現在工作正常。我目前沒有時間考慮額外的信息,但他們非常感興趣。謝謝:) – efkah

1

要使用<%#%>語法的標準標記(外綁定控件) - 你必須調用DataBind ()在用戶控件或頁面上。

+0

這解決了我的問題。謝謝。 –