【问题标题】:If else logic in Repeater (aspx page)转发器中的 if else 逻辑(aspx 页面)
【发布时间】:2023-03-31 04:08:01
【问题描述】:

我的网站上有一个中继器,然后我需要执行以下代码:

<% if(Eval("TypeID") = 5) then %>
    <%# Html.BtnDigital(Eval("ID").ToString(),Eval("Title").ToString())%>
<% end if %>

基本上:如果数据绑定项的属性是 5,我需要做一些特别的事情。

我无法通过添加新属性来更改数据绑定项(很遗憾),而且我现在仅限于 VB.NET。

当我没有 if 语句时,按钮显示正常,但是当我有 if 语句时,我收到以下错误(抱歉丹麦语):

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)

谢谢:)

【问题讨论】:

    标签: asp.net vb.net webforms eval repeater


    【解决方案1】:

    解决这种情况的一个好方法是对中继器的ItemDataBound-事件作出反应。 在 CodeBehind 中检查条件要容易得多。

    例如,如果您想根据项目的值更改 ItemTemplate 中控件的可见性,您可以添加以下代码(以下代码是一个示例;我假设有ItemTemplate 中 ID 为“txtValue”的文本框):

    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
    

    【讨论】:

      【解决方案2】:

      您需要做的是检查 ItemDataBound 事件中的值。这些将在每个项目被绑定时触发。在这甚至做你的检查,如果你有匹配做你的改变。

      http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound(v=vs.110).aspx

      msdn 页面中的示例还显示了如何区分页眉和页脚行以及备用行模板(如果您使用它们)。在创建每一行时触发偶数。

      【讨论】:

        猜你喜欢
        • 2016-03-24
        • 2013-06-08
        • 2013-06-29
        • 2017-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        相关资源
        最近更新 更多