我需要知道如果有以下操作会如何直观地执行操作(假设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,但我们试图将这个特定表单的大部分处理保留在客户端之外。
谢谢,并参加派对。
答案 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