2009-03-23 4 views
3

Как бы сбросить свой элемент asp:DropDownList (у которого есть runat="server"), чтобы индексировать 0 каждый раз, когда страница «перезагружается» в Firefox (нажата F5)?DropdownList сбрасывается на индекс 0 при загрузке

Если вы предлагаете использовать JavaScript, пожалуйста, обратите внимание, что

  • Я не использую форму
  • Я не знаю, как получить доступ к элементам, которые имеют runat="server" с JavaScript

If это можно сделать с помощью скрипта на странице .aspx, пожалуйста, объясните.

ответ

7

код положить в Page_Load событие, чтобы сделать это

protected void Page_Load(object sender, EventArgs e) 
{  
    myDropDownList.SelectedIndex =0; 
} 

EDIT:

В ответ на ваши комментарии, если вы поставили выше логику внутри, если заявление, чтобы проверить, является ли Page.IsPostback = false , то при обновлении выбранный индекс не будет возвращен к 0 (который выполняет обратную передачу клиента). В качестве примера, чтобы показать это, вот страница с выпадающим списком, установленным в AutoPostBack при выборе

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>My Example</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:DropDownList ID="ddl" runat="server" AutoPostBack="true" > 
     </asp:DropDownList> 
    </div> 
    </form> 
</body> 
</html> 

Вот код за

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Init(object sender, EventArgs e) 
    { 
     //Apologies for Dairy Produce inspired list 
     ddl.Items.Add(new ListItem("Cheese")); 
     ddl.Items.Add(new ListItem("Yoghurt")); 
     ddl.Items.Add(new ListItem("Milk")); 
     ddl.Items.Add(new ListItem("Butter")); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Run the Page with this in first, then comment out 
     //the if statement to leave only ddl.SelectedIndex = 0; 

     if (!Page.IsPostBack) 
     { 
      ddl.SelectedIndex = 0; 
     } 
    } 
} 

Как будет показано, когда страница первоначально бежал , после обновления выбранный индекс будет сохранен в раскрывающемся списке; Однако, когда выдается комментарий if, при обновлении выбранный индекс устанавливается равным 0 (который в этом случае равен Сыр).

+0

Это первое, что я пробовал. Это не сработает ... DropdownList, похоже, сбрасывается в предыдущий выбор кешем. Не то, чтобы это должно было иметь значение, но я поставил эту команду в его «If Page.IsPostBack = False» заявление – Andrew

+0

также .. Предположим, вы имеете в виду из кода позади? – Andrew

+0

Он может быть либо в файле с кодом (предпочтительный подход), либо в тегах сценария в разметке aspx (аналогично классическому ASP). Вероятным источником предыдущего индекса будет Viewstate, но он устанавливается в Pre_Load и будет переопределен вышеуказанным оператором. –

1

Просто добавьте этот код на мероприятие Page_Load:

if (myDropDown.Items.Count > 0) 
{ 
    myDropDown.Items[myDropDown.SelectedIndex].Selected = false; 
    myDropDown.Items[0].Selected = true; 
} 
+0

. Уже пробовал это. не работает. если вы проверите выпадающий список SelectedIndex в Page_load, он вернет 0 .... но другой индекс будет виден ... Я думаю, что кеш браузера сбрасывает его после выполнения кода (я использую firefox).Я предполагаю, что вы имеете в виду из кода? – Andrew

+1

Много лет спустя, и этот ответ помог мне, когда принятый ответ почему-то не работал. Спасибо за это. – Josh

1

В вашем скрипте под кодом HTML:

B01 = document.getElementById('<%=me.yourID.clientid %>'); 
B01.selectedIndex = 0; 

Happy Coding ^^

1

остановка Firefox с сохранением ViewState и заселив форма:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.Browser.Browser == "Firefox") 
      Form.Attributes.Add("autocomplete", "off"); 
    } 
Смежные вопросы