DropDownList в UpdatePanel

Лучший метод должен был бы, вероятно, определить и оценка содержание блока сценария непосредственно через DOM.

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

Независимо от того, что Вы реализуете, мог быть использован для XSS.

9
задан iersoy 10 August 2009 в 20:10
поделиться

4 ответа

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

КОД ASPX

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        Current Time: <asp:Label ID="lblTime" runat="server" /><br />
        Session Value: <asp:Label ID="lblSessionValue" runat="server" /><br />
        <br />
        <asp:UpdatePanel ID="upSetSession" runat="server">
            <ContentTemplate>
                <asp:DropDownList ID="ddlMyList" runat="server" 
                    onselectedindexchanged="ddlMyList_SelectedIndexChanged"
                    AutoPostBack="true">
                    <asp:ListItem>Select One</asp:ListItem>
                    <asp:ListItem>Maybe</asp:ListItem>
                    <asp:ListItem>Yes</asp:ListItem>
                </asp:DropDownList>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="ddlMyList" 
                    EventName="SelectedIndexChanged" />
            </Triggers>
        </asp:UpdatePanel>
    </div>
</form>

КОД СЗАДИ

    protected void Page_Load(object sender, EventArgs e)
    {
        this.lblTime.Text = DateTime.Now.ToShortTimeString();
        if (Session["MyValue"] != null) 
            this.lblSessionValue.Text = Session["MyValue"].ToString();
    }

    protected void ddlMyList_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session.Remove("MyValue");
        Session.Add("MyValue", this.ddlMyList.SelectedValue);
    }
24
ответ дан 4 December 2019 в 07:35
поделиться

Чтобы получить что-либо, сохраненное в сеансе, вы должны отправить это на сервер.

Возможно, некоторые дополнительные сведения о том, почему вы не хотите обновлять UpdatePanel, были бы полезны, и что вы пытаетесь достичь, используя значение в Session.

EDIT: Судя по вашим комментариям, кажется, что мне, что решением было бы сохранить текущий файл .ascx в сеансе и настроить для вашего DropDownList автоматическую отправку сообщений.

Итак, при работе с кнопками «Далее» и «Назад» сохраните индикатор для правильного .ascx в сеанс.

Во время обратной обработки события dropdownlist вы можете просто убедиться, что текущий файл .ascx все еще отображается, проверив сеанс для отображения правильного файла. Когда результат будет возвращен клиенту, ничего не изменится,

3
ответ дан 4 December 2019 в 07:35
поделиться

большое спасибо Я решил проблему, управляя переменными в событии Page_Load.

If Label1.Text = 1 Then
    Dim tempcontrol2 As Control = LoadControl("Page1.ascx")
    PlaceHolder1.Controls.Add(tempcontrol2)

ElseIf Label1.Text = 2 Then
    Dim tempcontrol2 As Control = LoadControl("Page2.ascx")
    PlaceHolder1.Controls.Add(tempcontrol2)
End If

спасибо за все ответы

1
ответ дан 4 December 2019 в 07:35
поделиться

Похоже, вы делаете гораздо больше работы, чем нужно. Вы изучали возможность использования ASP.NET Wizard Control? http://msdn.microsoft.com/en-us/magazine/cc163894.aspx или просто Google.

Если вы все еще хотите делать это по-своему, у вас есть для отправки на сервер (либо без автоматической отправки + нажатие кнопки отправки вручную, либо путем включения автоматической отправки), поскольку Сессия является концепцией на стороне сервера. HTTP - это протокол без состояния, поэтому единственная концепция состояния должна выполняться вне домена HTTP. Это означает, что вы застряли в сохранении состояния на сервере (например, в сеансе) или, что гораздо более строго, на компьютере клиента (например, в файле cookie).

1
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: