Вопрос по post, redirect, forms, response.redirect, asp.net – ASP.NET: как перенаправить, предварительно заполнив данные формы?

2

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

я попытался установить свой текущийRequest.Form данные:

<code>if (theyWantToDoSomething)
{
   //pre-fill form values
   context.Request.Form["TextBox1"] = "test";
   context.Request.Form["ComboBox1"] = "test 2";
   context.Request.Form["TextBox2"] = GetTheTextForTheThing();

   //tell the client to go there
   context.Response.Redirect("~/SomeWebForm.aspx");
   return;        
}
</code>

Но я получаю исключение, чтоForm значения только для чтения.

Как можно было бы отправить клиента на другую страницу, предварительно заполнив данные формы?

Answer

я использовал состояние сеанса для хранения значений. Важно отметить, что по умолчаниюHandler не имеет доступа кSession (объект сеанса будетnull). Выдолжен сказать IIS, чтобы дать вам сессию объект, добавивIRequiresSessionState интерфейс маркера к вашему классу обработчика:

<code>public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
   public void ProcessRequest(HttpContext context)
   {
      ...
      if (theyWantToDoSomething)
      {
         //pre-fill form values
         context.Session["thing1"] = "test";
         context.Session["thing2"] = "test 2";
         context.Session["thing3"] = GetTheTextForTheThing();

         //tell the client to go there
         context.Response.Redirect("~/SomeWebForm.aspx");
         return; //not strictly needed, since Redirect ends processing
      }
      ...
   }
}
</code>

Ваш Ответ

3   ответа
1

Другой подход, который еще не упоминался, - это использование Server.Transfer позволяет использоватьСвойство Page.PreviousPage, предоставляя доступ к элементам управления на странице, которая передала элемент управления.

Как упоминалось в jrista, использование Transfer не обновляет URL-адрес, отображаемый для пользователя, что может быть или не быть проблемой. Например, пользователь не может точно добавить в закладки страницу, на которую он был перенесен, так как URL будет исходной страницей передачи.

7

Вы можете заполнить только свой ответ, запрос является входными данными и действительно только для чтения.

Если вы используете ASP.NET, существует множество способов выполнить то, что вам нужно:

The best way would probably be to pass the data you need to be pre-populated to SomeWebForm.aspx via the Session object, and on that pages Load method, populate your form. Keep in mind that when you do Response.Redirect, a 302 response is sent to the client with the URL the client should redirect to. The process is transparent to the user...but there is a full round trip involved.

Another alternative to populating the users Session would be to add GET parameters via a query string to the redirect to SomeWebForm.aspx.

If you need to transfer processing to the SomeWebForm.aspx page without round tripping, you could use Server.Transfer. This will transfer execution from the current page to the page you choose...however, this can cause some odd behavior on the client end because the URL does not update. As far as the user is concerned, it will still appear as though they are on the same page they started on.

Это трюк, который вы можете сыграть. Вы можете перенаправить на страницу, на которой есть JavaScript, который будет выполнять POST к странице, которую вы действительно хотите. Вот как работает SAML SSO: перенаправление, передача данных в скрытое поле; JavaScript затем поворачивается и помещает эти данные на нужную страницу.
Отличные дополнения от Мэтта и Джона. Уловка JavaScript довольно хороша и распространена, когда вам действительно нужно сделать POST, а не GET.
Я использовал сессии, работает достаточно хорошо. Ian Boyd
Чтобы добавить к вашему заявлению о перенаправлении - 302, отправленный в браузер, инициирует запрос GET для нового URL, а не для POST, поэтому вы можете либо сохранить данные в строке запроса, либо в сеансе. Вы не можете сделать POST стиля формы с перенаправлением. Вы подразумевали это в своем посте, но хотели, чтобы это было понятно Иану Бойду.
3

Несколько идей, которые могут помочь вам начать:

Pass the values in the query string Store the values in the session state or in a seperate cookie Store the values in HttpContext.Items and use Server.Transfer instead of Response.Redirect

Похожие вопросы