ASP.NET:以编程方式显示/隐藏单选按钮列表项

时间:2011-01-18 22:13:21

标签: asp.net

我需要知道如果有以下操作会如何直观地执行操作(假设useGreek()useNato()为每次加载或回发时将被查询的状态):

<asp:radioButtonList id="rbl" runat="server" autoPostBack="true">
    <asp:listItem value="alpha" text="Alpha" />
    <% if(useGreek()) { %>
        <asp:listItem value="beta" text="Beta" />
        <asp:listItem value="gamma" text="Gamma" />
    <% } else if(useNato()) { %>
        <asp:listItem value="bravo" text="Bravo" />
        <asp:listItem value="charlie" text="Charlie" />
    <% } %>
    <asp:listItem value="delta" text="Delta" />
</asp:radioButtonList>

(很明显,我通常不会被要求为IIS写作。)

无论如何,ASP.NET不喜欢与列表项交错的代码,所以这是不行的。我想有一些以C#为基础的方式来处理这个问题,但我已经尝试了几天而没有运气。

另外,为了清楚起见,我在这里寻求服务器端解决方案。我非常精通jQuery,但我们试图将这个特定表单的大部分处理保留在客户端之外。

谢谢,并参加派对。

1 个答案:

答案 0 :(得分:2)

没有C#,但我想你明白我的意思:

在codebehind的page_load中:

If Not IsPostBack Then
    Me.rbl.Items.Add(New ListItem("Alpha", "alpha"))
    If (useGreek()) Then
        Me.rbl.Items.Add(New ListItem("Beta", "beta"))
        Me.rbl.Items.Add(New ListItem("Gamma", "gamma"))
    ElseIf (useNato()) Then
        Me.rbl.Items.Add(New ListItem("Bravo", "bravo"))
        Me.rbl.Items.Add(New ListItem("Charlie", "charlie"))
    End If
    Me.rbl.Items.Add(New ListItem("Delta", "delta"))
End If

如果您必须检查每个回发,因为状态可能会快速更改,您可以在顶部添加Me.rbl.Items.Clear()并删除PostBack检查。

编辑: C#

if (!IsPostBack) {
    this.rbl.Items.Add(new ListItem("Alpha", "alpha"));
    if ((useGreek())) {
        this.rbl.Items.Add(new ListItem("Beta", "beta"));
        this.rbl.Items.Add(new ListItem("Gamma", "gamma"));
    } else if ((useNato())) {
        this.rbl.Items.Add(new ListItem("Bravo", "bravo"));
        this.rbl.Items.Add(new ListItem("Charlie", "charlie"));
    }
    this.rbl.Items.Add(new ListItem("Delta", "delta"));
}

因为我不确定您是否已经知道代码隐藏模型,请查看以下链接: MSDN: Codebehind and Compilation in ASP.NET 2.0