2011-01-18 71 views
1

我需要知道如何执行以下直觉上会做的事情(想象一下useGreek()useNato()是每个加载或回传会查询的状态):ASP.NET:以编程方式显示/隐藏单选按钮列表项

<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非常熟悉,但我们试图将此特定表单的大部分处理都保留在客户端之外。

谢谢,派对上。

+0

什么结果你当前的代码获得? – VoodooChild 2011-01-18 22:19:11

回答

2

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

在代码隐藏的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()到顶部并删除回发检查。

编辑: 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

相关问题