需求是一个投票系统,后台是可以设置多选或单选的,现在的问题是如何根据得到的多选或单选来动态显示为CheckBox或RadioButton呢?
<td height="23">
<asp:CheckBoxValue ID="CheckBoxOption" Value='<%#Eval("OptionID") %>' runat="server" />
</td>
上面代码是在RepeaterItem中,如果通过if(Eval("state").ToString() == "True")这样的代码去判断是否为多选,就会出现错误提示:Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用,我试了动态加载控件,是可以动态加载的,但我还要在回发中获取动载加载的控件值,查了下资料说动态加载的控件是FindControl找不到的。上面两条路都行不通,怎么办呢?

解决方案 »

  1.   

    <%#Eval("state").ToString() == "True":<asp:CheckBoxValue ID="CheckBoxOption" Value='<%#Eval("OptionID") %>' runat="server" /> %>
    写不下去了,这怎么写呢,肯定不行啊
      

  2.   

    放一个Literal控件算了,后台根据数据库动态确定Literal.Text的值,用html标签。Request.Form[""]获取值。要么用PlaceHolder,后台动态往里添加CheckBox或RadioButton或者用CheckBoxList,后台动态添加Item,确保只能选其一还是可多选。
      

  3.   

    在绑定事件里面,动态生成控件,不要在aspx里面写<%#Eval("state").ToString()
      

  4.   

    用两个placeholder分别把单选多选放进去,根据后台选择,显示不同
      

  5.   

    其实这种选择,你还不如先把得到 Eval("")值进行判断,然后在控件里面选
      

  6.   

    net_lover
    我试过在.aspx中放入一个Panel,然后.aspx.cs中根据state值动态生成CheckBox或RadioButton,生成是可以的,但回发之后,我再去通过FindControl找RepeaterItem中的CheckBox或RadioButton,就找不到了。我现在的解决应该和6楼的差不多,用了一种取巧的办法,同时放CheckBox和RadioButton,然后在.aspx.cs中根据state值动态设置哪个显示哪个隐藏。
      

  7.   


    基本的机制,可以参考我以前写过的一个demo:http://dotnet.wgets.com/thread/252294
      

  8.   

    回发之后,确定repeater里一定有数据吗?
    先不要急着用findcontrol找,有可能是repeater里啥数据也没有导致的。