Dropdownlist возвращает ноль с частичной версией страницы - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь прочитать значение из выпадающего списка после частичной пост-страницы назад.По некоторым причинам он всегда равен нулю.

ASP:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
       <asp:DropDownList ID="ddlW1SundayProject1" runat="server" 
            DataSourceID="dataProjectList" 
            DataTextField="ProjectName" DataValueField="Project_Id"
            AppendDataBoundItems="true" 
            onBlur="validateProjectTask('W1', 'Sunday', 1);" 
            AutoPostBack="True" ">
            <asp:ListItem Text="" Value="" Selected="True"></asp:ListItem>
        </asp:DropDownList>
        <asp:Label ID="lblW1SundayProject1" runat="server"></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

Код:

protected void Page_Load(object sender, EventArgs e)
{

   if (ScriptManager.IsInAsyncPostBack)
   {
       lblW1SundayProject1.Text = "User selected: " + Request.Form["ddlW1SundayProject1"];   // this is always null
   }
}

Выход: «Выбран пользователь:»

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Это не будет работать, потому что серверные элементы управления ASP.NET (например, DropDownList) манипулируют именами / идентификаторами полей формы.Поэтому при использовании имени, введенного вами для идентификатора элемента управления (ddlW1SundayProject1), для просмотра в коллекции Form ничего не будет найдено (поскольку фактическое имя в html будет выглядеть примерно так: ctl00_UpdatePanel1_ddlW1SundayProject1).

Чтобы получить отправленное значение, вы можете либо использовать ddlW1SundayProject1.SelectedValue, либо, если по какой-то странной причине вам нужно заглянуть в коллекцию Form, вы можете сделать Request.Form[ddlW1SundayProject1.ClientID].

0 голосов
/ 29 августа 2011

Оказывается, BlockUI предотвращал обратную передачу.Я нашел решение, размещенное здесь: JQuery BlockUI с UpdatePanel Viewstate Issue

0 голосов
/ 24 августа 2011

Кажется, что это нормально работает, если вы не получаете никакой ошибки в Visual Studio, потому что единственное, что я могу видеть в вашем коде, который не является правильным, это ваш <asp:DropDownList тег, который не правильно сформирован в AutoPostBack="True" ">, где выиметь дополнительную "

...