我在gridview中有以下代码:
<% If Eval("LabelType").ToString() = "Singleline" Then%> <asp:TextBox ID="txtSingleLine" runat="server" ></asp:TextBox> <% End If%>
<% If Eval("LabelType").ToString() = "Multiline" Then%> <asp:TextBox ID="txtMultiline" runat="server" TextMode="MultiLine" ></asp:TextBox> <% End If%>
<% If Eval("LabelType").ToString() = "Image" Then%> <asp:FileUpload ID="FileUpload1" runat="server" /> <% End If%>
我收到以下错误:
数据绑定方法,如Eval(),XPath()和Bind()只能是 在数据绑定控件的上下文中使用
从this问题我开始知道应该添加#,但是当我添加为:
它不接受这个(在整个陈述下方显示蓝线)。
请告诉我我在哪里犯错误。
请帮帮我。
我正在使用vb.net,但在c#中回答也很有帮助。
答案 0 :(得分:1)
您可以尝试根据LabelType的值设置每个控件的可见性,如下所示:
<asp:TextBox ID="txtSingleLine" runat="server" Visible="<%# Eval("LabelType").ToString() == "Singleline" %>"></asp:TextBox>
<asp:TextBox ID="txtMultiline" runat="server" TextMode="MultiLine" Visible="<%# Eval("LabelType").ToString() == "Multiline" %>" ></asp:TextBox>
<asp:FileUpload ID="FileUpload1" runat="server" Visible="<%# Eval("LabelType").ToString() == "Image" %>" />
答案 1 :(得分:1)
与错误一样,您不能在数据绑定控件之外使用Eval
,因此我建议您将控件动态插入PlaceHolder
控件,如下所示:
标记:
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
代码隐藏:
If LabelType = "Singleline" Then
' Create textbox and add to placeholder
Dim textbox = New TextBox()
textbox.ID = "txtSingleLine"
PlaceHolder1.Controls.Add(textbox)
Else If LabelType = "Multiline" Then
' Create textbox with multi-line text mode and add to placeholder
Dim multilinetextbox = New TextBox()
multilinetextbox.ID = "txtMultiline"
PlaceHolder1.Controls.Add(multilinetextbox)
Else If LabelType = "Image" Then
' Create file upload and add to placeholder
Dim fileupload = New FileUpload()
fileupload.ID = "FileUpload1"
PlaceHolder1.Controls.Add(fileupload)
End If
注意:上面代码中的LabelType
是您在Eval("LabelType").ToString()
中所做事情的字符串表示。