Перенаправление без обратной связи - PullRequest
1 голос
/ 06 июля 2010

У меня есть форма регистрации пользователя. Здесь у меня есть ссылка на другую страницу (страницу информации о карте), которая должна быть заполнена для регистрации. Пользователь заполняет несколько полей в форме регистрации пользователя и нажимает на ссылку, которая ведет на страницу с информацией о карте. Когда пользователь щелкает ссылку на странице информации о карте, чтобы вернуться на страницу регистрации, предыдущие данные, введенные при регистрации, исчезают. Поэтому мне нужно перенаправить со страницы информации о карте на страницу регистрации без обратной передачи. Как я могу это сделать?

Response.Redirect () используется для перенаправления.

Ответы [ 6 ]

4 голосов
/ 06 июля 2010

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

//eg in registration page
protected void CardInfoLink_Click(object sender, EventArgs e)
{
    //store details entered
    Session["Registered"] = true;
    Session["Username"] = txtUserName.Text; 
    //etc for any other fields
    Response.Redirect("~/CardDetailsPage.aspx");
}

, затем в методе Page_Load вы можете, еслиданные сеанса существуют, предварительно заполните форму из сеанса.например,

if (!Page.IsPostback && (bool)Session["Registered"])
{
    txtUserName.Text = (string)Session["Username"];
    //repopulate other fields as necessary
}
1 голос
/ 06 июля 2010

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

Единственный способ сохранить информацию в перенаправлениях - это использовать переменные сеанса, файлы cookie или даже сохранять данные в базе данных /XML-файл и заполнить его при возврате на эту страницу.

Я бы посоветовал вам сохранить информацию, когда пользователь перенаправляется на информационную карту, а затем при возврате проверить значения и заново заполнить их.

1 голос
/ 06 июля 2010

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

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

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

0 голосов
/ 06 июля 2010

Вы можете использовать любой вид ajax-запроса, нажав кнопку «перейти на следующую страницу», чтобы скопировать регистрационные данные в сеанс.Затем после возвращения вы можете снова заполнить данные и удалить сеанс.Ваш код должен быть похож на этот:

---------------- jquery ajax request -----------------------

function SetValuesIntoSession(value1, value2, value3) {        
        $.ajax(
        {
            type: "POST",
            url: WebServicePathAndName.asmx/InsertIntoSessionMethodName",
            contentType: "application/json; charset=utf-8",
            data: "{value1:'" + value1 + "', value2:'" + value2 + "', value3:'" + value3 + "'}",
            dataType: "json",
            success: function(response) {
                if (response.d == "Yes") {
                    //do something in correct response
                }
                if (response.d == "No") {
                    //do something for incorrect response
                }
            },
            error: function(xhr) {
                alert('Error!  Status = ' + xhr.status);
            }
        });       
}

ниже приведен код веб-службы, которая должна вставлять данные в сеанс.Обратите внимание, что вы должны установить «EnableSession = true», если хотите использовать состояние сеанса в веб-службе

--------------------- WebServicePathAndName.asmx ------------------

[WebMethod( EnableSession = true )] 
public void InsertIntoSessionMethodName( string value1, string value2, string value3 )
{

    Session[ "value1" ] = value1;
    Session[ "value2" ] = value2;
    Session[ "value2" ] = value3;
}

Я думаю, что остальная часть кода должна быть легко реализована.

0 голосов
/ 06 июля 2010

Вы можете сохранить значения в ViewState/Session и перенаправить на другую страницу (страницу с информацией о карте), а затем заново заполнить значения при возврате на страницу регистрации. Или показывая pop-ups или panels (показать / скрыть, используя свойство Visible) на той же странице, вы можете сохранить введенные пользователем данные. (Если вы используете серверные элементы управления, значения не очищаются).

0 голосов
/ 06 июля 2010

Server.Transfer() выполнит перенос на другую страницу на стороне сервера.

Обновление: можно будет заполнить свойство текущих страниц Context.Items исходным состояниемпереносится строкой запроса.Это ведет себя подобно состоянию сеанса, но ограничивается текущим запросом.

Обновление 2: метод Server.Transfer() имеет перегрузку, которая принимает параметр bool preserveForm, это сохраняет строку запросапараметры:

http://msdn.microsoft.com/en-us/library/aa332847(v=VS.71).aspx

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