I have a repeater on my website, and then I need to do the following code:
<% if(Eval("TypeID") = 5) then %>
<%# Html.BtnDigital(Eval("ID").ToString(),Eval("Title").ToString())%>
<% end if %>
Basically: if a property on the databound item is 5, I need to do something special.
I cannot change the databound item, by adding a new property (unfortunately), and I am limited to VB.NET right now.
The button shows fine when I don't have the if statement, but when I have the if statement, I get the following error (sorry for Danish):
System.InvalidOperationException: Databindingmetoder som Eval(), XPath() og Bind() kan kun bruges i forbindelse med et databundet kontrolelement.
ved System.Web.UI.Page.GetDataItem()
ved System.Web.UI.TemplateControl.Eval(String expression)
ved ASP.controls_guidesection_ascx.__Render__control19(HtmlTextWriter __w, Control parameterContainer) i C:\Users\larsholdgaard\Documents\Work\SAXO.com\Saxo.Websites.Base\src\Saxo.Website.Base\Controls\GuideSection.ascx:linje 75
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Control.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Control.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Control.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Control.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Control.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Control.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Control.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved ASP.views_masterpages_saxomasterpage_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer) i C:\Users\larsholdgaard\Documents\Work\SAXO.com\Saxo.Websites.Base\src\Saxo.Website.Base\Views\Masterpages\SaxoMasterPage.Master:linje 74
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Control.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
ved System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
ved System.Web.UI.Page.Render(HtmlTextWriter writer)
ved System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
ved System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
ved System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Thanks :)
A good approach to solve such situations is to react to the ItemDataBound-event of the Repeater. It's much easier to check conditions in CodeBehind.
For instance, if you want to change the visibility of a control in the ItemTemplate based upon a value of the item, you could add the following code (the following code is an example, among other things; I assume that there is a TextBox with the ID "txtValue" in the ItemTemplate):
Private Sub Repeater_OnItemDatabound(Object sender, RepeaterItemEventArgs e)
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Dim myItem = TryCast(e.Item.DataItem, MyDataItemClass)
Dim txtBox = TryCast(e.Item.FindControl("txtValue"), TextBox)
If (txtBox IsNot Nothing) Then
txtBox.Visible = myItem.TypeId = 5
txtBox.Text = myItem.SomeInterestingText
End If
End If
End Sub