如何在内联if语句中使用数据绑定记录

时间:2010-03-10 18:30:51

标签: asp.net repeater itemtemplate data-binding

这是我的问题:

我的asp.net(VB)上有一个转发器:

<asp:Repeater ID="Repeater1" runat="server">    
<ItemTemplate>
  <asp:Label ID="Label1" runat="server" Text='<%# Eval("Question_Number") %>' /> 
  <%#Eval("Question_Desc")%>

现在我要做的是,检查一下我没有使用的名为“Question_Type”的值,它可能是= 1,2或3,具体取决于它是多项选择,简答等等。

我试过这个:

<%  
if Eval("Question_type") = 1 then

Response.Write(" <asp:RadioButton runat=""server"">test1</asp:RadioButton>")
Response.Write(" <asp:RadioButton runat=""server"">test2</asp:RadioButton>")
Response.Write(" <asp:RadioButton runat=""server"">test3</asp:RadioButton>")

end if
%>

我收到此错误:

数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。

我如何在if语句???

中使用此值

1 个答案:

答案 0 :(得分:1)

您将需要处理ItemDataBound事件并手动处理其中的值。

给出这个转发器,我可以解决这个问题:

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="HandleQuestionType">
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("Question_Number") %>' />
        <%#Eval("Question_Desc")%>
        <asp:PlaceHolder ID="phQuestions" runat="server" />
    </ItemTemplate>
</asp:Repeater>

这是我的事件处理程序,用于获取单选按钮列表的可能答案:

protected void HandleQuestionType(object sender, RepeaterItemEventArgs e)
{
    // Execute the following logic for Items and Alternating Items.
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var question = e.Item.DataItem as Question;
        var placeHolder = e.Item.FindControl("phQuestions") as PlaceHolder;

        if(question != null && placeHolder != null)
        {
            if(question.Question_Type == QuestionTypeEnum.MultipleChoice)
            {
                var radioList = new RadioButtonList
                                    {
                                        DataTextField = "Answer",
                                        DataValueField = "ID",
                                        DataSource = GetPossibleAnswers()
                                    };

                radioList.DataBind();

                placeHolder.Controls.Add(radioList);
            }
        }
    }
}