ASP.NET:如何重定向,预填表单数据?

时间:2009-06-26 21:13:06

标签: asp.net forms post redirect response.redirect

我希望处理程序重定向到网络表单页面,预先填写表单上某些控件的值。

我尝试设置当前的 Request.Form 数据:

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;        
}

但我得到一个例外,表格值是只读的。

将客户端发送到另一个页面的方法是什么,预填表格数据?


答案

我使用Session状态来存储值。重要的是要注意,默认情况下,处理程序无法访问会话(会话对象将 null )。通过将have to tell IIS to give you the Session标记接口添加到处理程序类中来IRequiresSessionState对象:

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
      }
      ...
   }
}

3 个答案:

答案 0 :(得分:7)

您只能填充您的Response,请求是输入数据,并且确实是只读的。

如果您使用的是ASP.NET,可以通过多种方式完成所需的操作:

  • 最好的方法可能是通过Session对象将需要预先填充的数据传递给SomeWebForm.aspx,并在那些页面上使用Load方法填充表单。请记住,当您执行Response.Redirect时,会使用客户端应重定向到的URL向客户端发送302响应。这个过程对用户来说是透明的......但是需要完整的往返行程。

  • 填充用户Session的另一种方法是通过查询字符串将GET参数添加到SomeWebForm.aspx的重定向。

  • 如果您需要将处理转移到SomeWebForm.aspx页面而不进行往返跳转,则可以使用Server.Transfer。这会将执行从当前页面转移到您选择的页面...但是,这可能会导致客户端出现一些奇怪的行为,因为URL不会更新。就用户而言,它仍然看起来好像是在他们开始的同一页面上。

答案 1 :(得分:3)

一些可能让你开始的想法:

  1. 传递查询字符串中的值
  2. 将值存储在会话状态或单独的cookie中
  3. 将值存储在HttpContext.Items中并使用Server.Transfer而不是Response.Redirect

答案 2 :(得分:1)

另一种尚未提及的方法是使用Server.Transfer可以使用Page.PreviousPage property,允许访问传输控件的页面上的控件。

正如jrista所说,使用Transfer不会更新显示给用户的URL,这可能是也可能不是问题。例如,用户无法精确地将他们转移到的页面加入书签,因为该URL将是原始转移页面的URL。