Метки не обновляются при изменении выбранного элемента в DropDownList - PullRequest
0 голосов
/ 24 апреля 2020

Я пытался использовать DropDownList для обновления содержимого метки.

Первый - это режим асинхронной передачи. Страница не обновляется sh при выборе нового элемента.

Второй режим синхронной передачи. Вся страница обновляется при выборе нового элемента.

Однако ни одна из этих двух меток не обновлялась, как мне нравится, когда я пытался выбрать новый элемент в моем DropDownList.

Может ли кто-нибудь помочь я?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ex8_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True">
        </asp:ScriptManager>
        <div>
            Password:<asp:TextBox ID="TextBox1" runat="server" TextMode="Password"></asp:TextBox>
            <br />
            <br />
            Asynchronous Transfer Mode</div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True">
                    <asp:ListItem Value="1">Item 1</asp:ListItem>
                    <asp:ListItem Value="2">Item 2</asp:ListItem>
                    <asp:ListItem Value="3">Item 3</asp:ListItem>
                    <asp:ListItem Value="4">Item 4</asp:ListItem>
                    <asp:ListItem Value="5">Item 5</asp:ListItem>
                </asp:DropDownList>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="DropDownList1"
                    EventName="SelectedIndexChanged" />
            </Triggers>
        </asp:UpdatePanel>

        <p>
            Show selected item <asp:Label ID="Label1" runat="server"></asp:Label>
        </p>
        <p>
            Synchronous Transfer Mode</p>
        <p>
            <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True">
                <asp:ListItem Value="1">Item 1</asp:ListItem>
                <asp:ListItem Value="2">Item 2</asp:ListItem>
                <asp:ListItem Value="3">Item 3</asp:ListItem>
                <asp:ListItem Value="4">Item 4</asp:ListItem>
                <asp:ListItem Value="5">Item 5</asp:ListItem>
            </asp:DropDownList>
        </p>
        <p>
            Show selected item <asp:Label ID="Label2" runat="server"></asp:Label>
        </p>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ex8_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Label1.Text = DropDownList1.SelectedValue;
    }

    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
    {
        Label2.Text = DropDownList2.SelectedValue;
    }
}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

При удалении элемента управления UdpatePanel, DropDownList после SelectedIndexChanged, Label обновляется с выбранным значением.

Элементы управления ScriptManager и UpdatePanel устраняют необходимость в обновлении sh всей страницы при каждой обратной передаче, что улучшает взаимодействие с пользователем.

Дополнительная информация здесь!

Вы можете иметь одну глобальную UpdatePanel, а затем использовать UpdatePanels в соответствии с требованиями. И тогда элементы управления не могут быть ограничены конкретной UpdatePanel. Это все еще обновляется.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" Inherits="Home" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form2" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server">
            <ContentTemplate>
                <div>
                    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                        <ContentTemplate>
                            <asp:DropDownList 
                                ID="DropDownList1" 
                                runat="server" 
                                OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" 
                                AutoPostBack="True">
                                <asp:ListItem Value="1">Item 1</asp:ListItem>
                                <asp:ListItem Value="2">Item 2</asp:ListItem>
                                <asp:ListItem Value="3">Item 3</asp:ListItem>
                                <asp:ListItem Value="4">Item 4</asp:ListItem>
                                <asp:ListItem Value="5">Item 5</asp:ListItem>
                            </asp:DropDownList>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </div>
                <p>
                    Show selected item <asp:Label ID="Label1" runat="server"></asp:Label>
                </p>
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>
0 голосов
/ 25 апреля 2020

DropDownList1 находится внутри UpdatePanel, а Label1 находится вне его. UpdatePanel позволяет отображать часть страницы, которая находится внутри нее. Поэтому Label1 сохраняет старое значение. Если вы поместите Label1 внутри UpdatePanel, точнее внутри ContentTemplate, вы увидите изменение метки.

UpdatePanel отобразит часть страницы без обратной передачи. Вы можете видеть, что при выборе элемента из DropDownList1 в вашем браузере нет новой go стрелки назад . Лучший способ проверить это - открыть страницу .aspx и сначала выбрать элемент из DropDownList1. Go стрелка назад по-прежнему будет отключена.

DropDownList2 не находится внутри UpdatePanel и использует обратную передачу для отображения всей страницы. По этой причине Label1, если оно находится за пределами UpdatePanel, устанавливает значение для выбранного элемента из DropDownList1 при выборе элемента из DropDownList2. Label1 получил выбранный элемент из DropDownList1, он просто ждет обратной передачи, которая запускается DropDownList1.

Для обновления Label2 вам необходимо добавить обработчик событий OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" в DropDownList2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...