Рекомендации по перенаправлению URL-адресов в веб-приложении ASP.NET - PullRequest
1 голос
/ 03 февраля 2010

У меня есть страница asp (Default.aspx), которая отображает разницу между двумя текстовыми файлами. Он содержит два раскрывающихся списка (ID = "File1" и "File2" соответственно) и кнопку (ID = "Submit").

Он также содержит элемент управления Literal с идентификатором «Результат».

Содержимое кнопки списка заполняется на основе файлов, присутствующих в физическом пути приложения.

Каждый раз, когда нажимается кнопка отправки, я хочу дать результат сравнения / сравнения в элементе управления Literal, поэтому у меня есть обработчик событий, подобный этому:

protected void Submit_Click(object sender, EventArgs e)
{
    Result.Text = CompareFiles(File1.SelectedValue, File2.SelectedValue);
}

Проблема в том, что вы не можете добавить в закладки результаты сравнения между конкретными файлами.

Чтобы решить эту проблему, я добавил значения файлов, выбранных для сравнения, в качестве строки запроса к URL-адресу и выполнил перенаправление. И поэтому изменил вышеописанный обработчик событий, чтобы он выглядел так:

protected void Submit_Click(object sender, EventArgs e)
        {
            string build1 = DropDownList1.SelectedValue;
            string build2 = DropDownList2.SelectedValue;

            string queryString = 
                String.Format("?file1={0}&file2={1}",HttpUtility.UrlEncode(build1),HttpUtility.UrlEncode(build2));

            string redirectionUrl = Request.Url.AbsolutePath + queryString;

            Response.Redirect(redirectionUrl, true);
        }

Соответственно вызывается метод «CompareFiles» в обработчике события «Page_Load». Теперь вы можете добавить в закладки результаты сравнения и загрузить их снова напрямую, поскольку URL-адрес будет содержать файлы для сравнения.

Но проблема в том, что свойство IsPostBack имеет значение false каждый раз, когда происходит перенаправление. Поэтому значения DropDownLists (файлы, присутствующие в каталоге физического приложения) оцениваются каждый раз.

Я не хочу, чтобы это происходило, если это перенаправление с той же страницы. Как я могу это сделать? Я хочу, чтобы это происходило только в том случае, если к странице обращаются впервые или к какой-либо другой странице.

Это плохая практика? Я имею в виду перенаправление на ту же страницу. Я могу избежать этой проблемы, предоставляя результаты на другой странице, но я хочу сделать это так, потому что я хочу, чтобы DropDownLists и кнопки «Отправить» всегда были там.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2010

Поскольку вы перенаправляете на ту же страницу, это НЕ постбэк, состояние представления потеряно, и оно должно повторно связать содержимое.

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

0 голосов
/ 03 февраля 2010

Добавлен комментарий к ответу:

Request.UrlReferrer
...