2011-07-08 3 views
1

У меня есть что-то вроде этого: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?

Спасибо.

ответ

2

Это для академической цели? Вы могли бы написать один и тот же код с меньшей разметкой с помощью 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 управление на сервере runat="server"

0

Для того, чтобы элемент управления, чтобы иметь представление серверных себя, вы должны объявить его с атрибутом RUNAT = «сервером»

Try

<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")

0

Элемент управления, к которому вы пытаетесь получить доступ, - это управление на стороне клиента. Если вы хотите получить доступ к серверной части, попробуйте добавить тег типа runat = "server". Что-то вроде

<select id="..." runat="server"> 
0

Вы должны установить для атрибута 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> 
1

Есть ли причина, вы используете 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.