GetElementByID на стороне сервера, asp.net?
У меня есть что-то подобное:
<asp:ListView ID="lvList" runat="server">
<LayoutTemplate>
<select id="select_list">
<option value="-1">
select one
</option>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</select>
</LayoutTemplate>
<ItemTemplate>
<option value="<%# Eval("code") %>">
<%# Eval("Name") %>
</option>
</ItemTemplate>
</asp:ListView>
И я хочу получить доступ select_list
на стороне сервера, после отправки кнопки.. Я пытался FindControl("select_list")
, lvList.FindControl("select_list")
, Request.Form["select_list"]
- никто из них не дал мне контроль...
Есть ли способ получить контроль по его идентификатору, так же, как JS getElementByID
?
Благодарю.
5 ответов
Это для академических целей? Вы можете написать тот же код с меньшей разметкой, используя asp:DropDownList
<asp:DropDownList ID="select_list" runat="server"
AppendDataBoundItems="true"
DataTextField="Name"
DataValueField="code">
<asp:ListItem Text="select one" Value="-1" />
</asp:DropDownList>
Если вы неравнодушны к использованию ListView, запустите HTML Control на сервере runat="server"
Есть ли причина, по которой вы используете ListView
заполнить HTML select
а не просто используя DropDownList
?
Вы можете просто заменить весь ListView
с DropDownList
вот так:
<asp:DropDownList ID="SampleDdl" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="Select one" Value="-1" />
</asp:DropDownList>
Затем в своем коде вы можете просто связать DropDownList
вот так:
SampleDdl.DataSource = DataSet
SampleDdl.DataValueField = "Code"
SampleDdl.DataTextField = "Name"
SampleDdl.DataBind()
Это автоматически заполнит DropDownList
для тебя. Указание DataValueField
автоматически заполнит Value
атрибуты во всех вариантах DropDownList
, Точно так же DataTextField
будет заселять Text
атрибутов.
Также важно отметить, что я добавил AppendDataBoundItems="true"
в моем примере выше - вам нужно будет добавить это, чтобы опция "Выбрать один" по умолчанию не заменялась данными, привязанными к элементу управления, - вместо этого привязанные данные добавляются после существующей опции.
Если вы используете DropDownList
затем вы можете просто получить доступ к элементу управления в своем коде, непосредственно обращаясь к SampleDdl
,
Элемент управления, к которому вы пытаетесь получить доступ, является элементом управления на стороне клиента. Если вы хотите получить доступ к нему на стороне сервера, попробуйте добавить тег вроде runat="server". Что-то вроде
<select id="..." runat="server">
Чтобы элемент управления имел представление о себе, вы должны объявить его с атрибутом runat="server"
Пытаться
<asp:ListView ID="lvList" runat="server">
<LayoutTemplate>
<select id="select_list" runat="server">
<option value="-1">
select one
</option>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</select>
</LayoutTemplate>
<ItemTemplate>
<option value="<%# Eval("code") %>">
<%# Eval("Name") %>
</option>
</ItemTemplate>
а затем попробуйте получить доступ с помощью FindControl("select_list")
Вам следует установить для его атрибута runat значение "server" и использовать свойство LayoutTemplate объекта ListView для его получения.
<asp:ListView ID="lvList" runat="server">
<LayoutTemplate>
<select id="select_list" runat="server">
<option value="-1">
select one
</option>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</select>
</LayoutTemplate>
<ItemTemplate>
<option value="<%# Eval("code") %>">
<%# Eval("Name") %>
</option>
</ItemTemplate>
</asp:ListView>