выпадающий список не сбрасывается при перезагрузке страницы - PullRequest
5 голосов
/ 22 марта 2009

Эй, ... очень простой вопрос

Обычно я пишу php, но сейчас программирую на ASP.NET 3.0 и не могу понять, как это исправить.

У меня есть DropdownList, и если я выбрал какое-то значение, ... мой код выполняет кучу вещей и выводит данные ......

Теперь, ... если я перезагружаю страницу (т.е. нажимаю F5 или небольшую перезагрузку в браузере) .... все мои данные сбрасываются, как если бы selectedIndex был равен 0 .... но фактическое значение отображается это предыдущий, который я выбрал! ... я пытаюсь сбросить индекс в моем коде в выражении "if ispostback = false" ... но ничего не работает ...... это как значение кэшируется, и я ничего не может сделать это изменения ...

... любая помощь будет оценена :) 1009 *

(дальнейшее объяснение: .... если вывести на экран mydropdownlist.selectedIndex из моей страницы загрузки Sub ... Он вернет 0 .... однако выбранный индекс на экране явно не 0. ... я понимаю ПОЧЕМУ это происходит ... мне просто нужно остановить это ... или хотя бы найти способ определения индекса в состоянии просмотра ...)

Andrew

Ответы [ 6 ]

4 голосов
/ 22 марта 2009

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

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

Если вы действительно хотите выбросить все изменения полей формы пользователя при перезагрузке / навигации, вызовите form.reset () в инициализации скрипта, чтобы вернуть его в состояние HTML. Но в обычных обстоятельствах это может быть весьма недружественным для пользователя.

3 голосов
/ 22 марта 2009

Похоже, что когда вы нажимаете f5, вы НЕ выполняете перезагрузку новой страницы. Вы говорите, что когда вы выбираете что-то из вашего выпадающего списка, вы делаете кучу кода позади вещей. Хорошо, что действие - постбэк. Поэтому нажатие клавиши f5 ПОСЛЕ того, что действие не будет считаться новым вызовом страницы, поэтому операция if (IsPostBack == false) не будет выполнена, поскольку это обратный вызов.

Ваше первое действие вызвало обратную передачу, поэтому нажатие клавиши f5 будет обратной передачей.

Звучит так, как будто у вас могут быть проблемы с состоянием зрения, так как другие ваши элементы управления сбрасываются. Хотя, если вы выполняете скрытие / показ с использованием сценариев на стороне клиента, они все равно не будут сохраняться через представление.

1 голос
/ 22 марта 2009

Попробуйте отключить veiwstate на флажок, если он вам не нужен.

0 голосов
/ 03 ноября 2011

Это фактически от parrkid по другому вопросу stackoverflow, но добавьте это в конце своей страницы:

<script language="javascript">
  var B01 = document.getElementById('<%=YourDropDownList.ClientID%>');
  B01.selectedIndex = 0;
</script>

Да ... полный взлом для того, что, вероятно, asp.net, но ИМХО: -P

0 голосов
/ 24 июня 2009

Привет, Я тоже пытаюсь очистить раскрывающийся список после выбора значения из другого раскрывающегося списка. Когда пользователь отправляется на отправку формы, должен быть только один раскрывающийся список, который имеет значение. Я запустил код, как показано ниже, но раскрывающийся список не будет сброшен сам при выборе значения из другого раскрывающегося списка. Я уверен, что я упускаю что-то очень простое или мое имя не в порядке. Спасибо.

enter code

`<% @ Page Language =" C # "AutoEventWireup =" true "CodeFile =" homepagestate.aspx.cs "наследует =" _ homepagestate "%>

< form id="form1" runat="server">

</ asp: ListItem> </ asp: ListItem>

    < /asp:DropDownList>

</ asp: ListItem> </ asp: DropDownList>

      < asp:Button ID="Button1" runat="server" Text="Submit" /></div>
</form>

с использованием системы;

с использованием System.Data;

с использованием System.Configuration;

с использованием System.Collections;

с использованием System.Web;

с использованием System.Web.Security;

с использованием System.Web.UI;

с использованием System.Web.UI.WebControls;

с использованием System.Web.UI.WebControls.WebParts;

с использованием System.Web.UI.HtmlControls;

открытый частичный класс _homepagestate: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

    if ( !IsPostBack )

    {

       // sel();

        DropDownList2.SelectedIndex = 0;

    }

}

protected void sel(object sender, EventArgs e)

{

    Response.Write(DropDownList2.SelectedIndex);

    //DropDownList2.selecteditem = 0;

}

}

0 голосов
/ 22 марта 2009

Вы пытались очистить кеш в вашем браузере? Большинство браузеров поддерживают Control + F5 в качестве жесткого обновления, которое очищает кэш текущей страницы и перезагружает всю страницу с сервера.

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