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>
Другие вопросы по тегам