2013-05-17 116 views
2

我有一箇中繼器。過去,轉發器中的每個項目都有一個關聯的文本框。但是,現在我向重複的項目添加了一個屬性,需要指定該項目是否使用文本框,較大的文本框或複選框。ASP.NET:在if語句中使用Eval

這裏是我的aspx代碼如下所示:

<%if (Eval("DisplayType") == "LargeBox") { %> 
    <asp:TextBox ID="largeBoxAnswer" Rows="8" runat="server" Width="200" MaxLength="2000" EvaluationQuestionID='<%# Eval("EvaluationQuestionId") %>' /> 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="largeBoxAnswer" Display="dynamic" Font-Bold="true" ErrorMessage="*" /> 
<%} %> 
<%else if (Eval("DisplayType") == "CheckBox") { %> 
    <asp:TextBox ID="checkBoxAnswer" runat="server" Width="200" MaxLength="100" EvaluationQuestionID='<%# Eval("EvaluationQuestionId") %>' /> 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="checkBoxAnswer" Display="dynamic" Font-Bold="true" ErrorMessage="*" /> 
<%} %> 
<%else { %> 
    <asp:TextBox ID="txtAnswer" runat="server" Width="200" MaxLength="100" EvaluationQuestionID='<%# Eval("EvaluationQuestionId") %>' /> 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtAnswer" Display="dynamic" Font-Bold="true" ErrorMessage="*" /> 
<%} %> 

這不是工作,我得到了以下錯誤: Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

我發現了不少關於這個錯誤,但沒有真正幫助解決這個問題。

我是否正在做這樣的事情是正確的方式?我不是超級有經驗的asp.net,所以我願意以不同的方式解決這個問題。如果這是最好的方法,我該如何將邏輯移到後面的代碼中,以便它能正常工作?

+0

所有這些代碼都在一箇中繼器內嗎?如果是這樣,請編輯您的問題併爲其添加標記。 –

回答

1

錯誤是告訴你,你的if語句實際上並不在數據綁定上下文中,所以即使你的Eval確實有效,它要求的是Eval ......「DisplayRule」......實際上並不存在於該行。

看看這個鏈接; eval in if statement?

從那些傢伙說的話,你的答案可能在於ElementIfTrue或Visible屬性。

所以,你可能最終會有這樣的事情;

<asp:TextBox ID="largeBoxAnswer" ElementIfTrue='<%# Eval("DisplayRule") == "LargeBox" %>' Rows="8" runat="server" Width="200" MaxLength="2000" EvaluationQuestionID='<%# Eval("EvaluationQuestionId") %>' /> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="largeBoxAnswer" Display="dynamic" Font-Bold="true" ErrorMessage="*" /> 
<asp:TextBox ID="checkBoxAnswer" ElementIfTrue='<%# Eval("DisplayRule") == "CheckBox" %>' runat="server" Width="200" MaxLength="100" EvaluationQuestionID='<%# Eval("EvaluationQuestionId") %>' /> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="checkBoxAnswer" Display="dynamic" Font-Bold="true" ErrorMessage="*" /> 
<asp:TextBox ID="txtAnswer" ElementIfTrue='<%# Eval("DisplayRule") == "**notsure**" %>' runat="server" Width="200" MaxLength="100" EvaluationQuestionID='<%# Eval("EvaluationQuestionId") %>' /> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtAnswer" Display="dynamic" Font-Bold="true" ErrorMessage="*" /> 

......我不認爲這解決了所有的問題,但它可能會讓你一路走來。