2009-06-11 5 views
3

У меня есть элемент управления ASP.NET, который связывает данные с ретранслятором. Внутри этого ретранслятора у меня есть другой пользовательский элемент управления. Я хочу передать значение этому второму элементу управления на основе текущего элемента привязки.ASP.NET: привязать значение к пользовательскому элементу управления внутри ретранслятора

<asp:Repeater runat="server" ID="ProductList"> 
    <ItemTemplate> 
     <p>Product ID: <%# Eval("ProductID") %></p> 
     <myControl:MyCoolUserControl runat="server" ProductID='<%# Eval("ProductID") %>' /> 
    </ItemTemplate> 
</asp:Repeater> 

Шаблон элемент повторителя правильно печатает мой идентификатор продукта с утверждением Eval, но когда я делаю то же самое, чтобы передать идентификатор продукта в MyCoolUserControl, он не работает (если ProductID на MyCoolUserControl является Nullable Int32 - я могу отлаживать его, и он всегда равен нулю).

Любые идеи, как я могу это сделать?

+0

Можете ли вы показать код вашего MyCoolUserControl? – Michael

ответ

3

Я сделал небольшой тест, и я получил его, если ProductID является строкой. После того, как я изменил его на int и в intcontrol, у меня возникли такие же проблемы. Я сделал int.Parse в источнике данных для повторителя и снова заработал. Проверьте, что ProductId, который вы передаете в источник данных повторителей, имеет тип int.

Mytest приложение.

string[] values = new string[]{ "12", "13" }; 

MyRepeater.DataSource = from v in values 
         select new 
         { 
          ProdId = int.Parse(v) 
         }; 

MyRepeater.DataBind(); 

<asp:Repeater runat="server" ID="MyRepeater"> 
    <ItemTemplate> 
     <My:control runat="server" ProductId='<%# Eval("ProdId") %>' /> 
    </ItemTemplate> 
</asp:Repeater> 

и в UserControl:

public int? ProductId 
{ 
    set { MyLabel.Text = value.Value.ToString(); } 
}