【发布时间】:2013-11-23 08:47:42
【问题描述】:
我正在尝试做一些我认为非常简单的事情 - 使用 ASP.NET 在选择标记中动态添加一些选项。
我的代码写成:
<select id='cmbDuration'>
<% Dim periods As Generic.List(Of Models.Duration) = DBSupport.getDurations
For Each d As Models.Duration In periods
Response.Write("<option value='" & d.id & "'>" & d.name & "</option>")
Next
%>
</select>
一切正常,我的 db 层返回的数据出现在我的选择标签中。
后来,我记得添加了一个runat = "Server" 标签,以便在我的代码隐藏帖子中处理我的数据。但是,添加之后,不会显示任何选项。检查生成的源代码,我也没有看到添加任何选项。
这里有什么问题?为什么添加runat = "Server"时不显示选项?
【问题讨论】:
-
你应该使用asp:DropDownList
-
这是可以理解的,但是,即使
asp:DropDownList被渲染为select标签,为什么添加runat="Server"会导致循环内的代码不会在页面上渲染任何内容?跨度> -
您不能像现在这样将 runat="server" 添加到呈现的控件中。你应该把它想象成你只是渲染了一堆字符串(HTML),这发生在解析 runat="server" 标记之后。因此,您可以添加一个 runat="server" 标记,然后在后面的代码中添加选项,或者您可以添加一个 HTML 负载,这在后面的代码中不可用。你不能两者都做,这是你想要做的。
-
所以,我理解这一点的方式是,添加
runat="Server"属性将导致我的控件仅在代码隐藏中可用于后续进程。我尝试了以下方法,这证明了这一点:<input type="checkbox" id="myId" runat="server"/><% myId.Checked = True%>- 代码块被忽略,复选框保持未选中状态。我必须在代码隐藏中更改其检查状态。谢谢。 -
添加了更具描述性的答案。这是关于编译时和运行时的差异。
标签: html asp.net forms html-select