2

リピーターがいます。以前は、リピーターの各アイテムにテキスト ボックスが関連付けられていました。しかし、繰り返し項目に属性を追加して、その項目にテキスト ボックス、より大きなテキスト ボックス、またはチェック ボックスを使用するかどうかを指定する必要があります。

私の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の経験が豊富ではないため、この問題に対する別のアプローチを受け入れています。これが最善の方法である場合、ロジックをコード ビハインドに移動して、これが適切に機能するようにするにはどうすればよいですか?

4

1 に答える 1

1

エラーは、if ステートメントが実際にはデータバインディング コンテキストにないことを示しているため、Eval が機能したとしても、Eval... "DisplayRule" ... 実際にはその行に存在しません。

このリンクを見てください。if文で評価?

彼らが言っていることから、あなたの答えは 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="*" />

... これですべての問題が解決するとは思いませんが、問題が解決する可能性があります。

于 2013-05-18T11:32:35.237 に答える