2011-01-29 3 views
1

На моей странице у меня есть местозаполнитель, где я загружаю usercontrol, когда я выбираю элемент в раскрывающемся списке.Загрузка usercontrol во время выполнения и перезагрузка страницы

protected void ddlLoadCtr_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Control userControl = LoadControl("../AleSettings1.ascx");  
    plchldSettingsControl.Controls.Add(userControl); 
} 

Если я нажимаю F5 (IE) после того, как пользовательский элемент управления было вынесено, я получаю предупреждение окно IE, что IE необходимо повторно отправить информацию ....
Как я могу предотвратить это, и почему это произошло?

UPDATE:

Может быть, есть другой подход? Я хочу загрузить определенный элемент управления (с его разметкой), когда пользователь выбирает его из выпадающего списка.
Если выполняется обратная передача, элемент управления не должен исчезать (только если в выпадающем списке был выбран другой элемент управления)

Все внутри панели обновления!

ответ

0

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

+0

Так что я ничего не могу сделать? (возможно, возвращение страницы в исходное состояние) – urker

+0

как бы вы это сделали? – Victor

+0

Не знаю, вот почему я спрашиваю. – urker

0

ASP.NET WebForms использует «postbacks». Это означает, что всякий раз, когда он обрабатывает «событие», например, выбрав элемент в списке выбора, он возвращает HTTP POST на сервер, чтобы получить новый HTML.

Это позволяет сохранить состояние между различными версиями страницы, но означает, что F5 будет POST, о котором предупреждает браузер.

Путь вокруг этого использовать POST-then-REDIRECT и обрабатывать постоянство элементов управления самостоятельно. Если это только один элемент управления, например. добавление элемента управления, это может быть сделано путем проверки строки запроса в Page_Load, чтобы увидеть, нужно ли загрузить управление:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if Request.QueryString["ddlLoadCtr"] = "1": 
    plchldSettingsControl.Controls.Add(LoadControl("../AleSettings1.ascx")); 
} 

, а затем перенаправить обратно на страницу, вместо того, чтобы использовать постбэк:

protected void ddlLoadCtr_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var newUrl = Request.RawUrl + "?ddlLoadCtr=1"; 
    Response.Redirect(newUrl); 
} 

Другие способы сохранения состояния - помимо параметров запроса - включают файлы cookie и переменные сеанса. У них есть недостаток не быть закладок.

В любом случае это означает, что вы не можете использовать автоматическое управление ASP.NET средствами управления ASP.NET.

+0

Это не совсем то, что я хочу, когда я нажимаю F5, я не хочу, чтобы элемент управления загружался. также, если какой-либо другой элемент управления на странице вызывает обратную передачу, он не должен влиять на элемент управления (если элемент управления уже загружен, сохраните его). также если я Response.Redirect (newUrl); все мое состояние управления ушло – urker

+0

p.s. Я также обернул все с помощью updatepanel – urker

+0

Я объяснил, почему состояние управления ушло - использование перенаправления означает управление состоянием самостоятельно, иначе это не то, что вы ищете. Это также означает, что вы застряли с предупреждением браузера при обновлении. – orip

Смежные вопросы