ASP.NET:如何重定向,预填表格数据?(ASP.NET: How to redirect, pr

2019-06-24 06:37发布

我希望有一个处理程序重定向到窗体上的某些控件的值的web的表单页面,预填充。

我尝试设置我目前的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)。 你必须告诉IIS给你的会话中加入的对象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
      }
      ...
   }
}

Answer 1:

你只能填入您的回复,请求输入数据,并且确实为只读。

如果你正在使用ASP.NET,有多种方式,你可以完成你所需要的:

  • 最好的办法很可能会传给你需要通过Session对象预填充到SomeWebForm.aspx数据,并在该网页加载方法,填充表单。 请记住,当你做的Response.Redirect,302响应被发送到客户端与客户端应该重定向到URL。 这个过程对用户透明......但是这牵涉到一个完整的往返。

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

  • 如果你需要无轮跳闸处理转移到SomeWebForm.aspx页面,你可以使用Server.Transfer的。 这将从当前页面选择页面传送执行......然而,这可能会导致在客户端的一些奇怪的行为,因为URL不会更新。 至于对用户来讲,它仍然会出现,尽管它们是他们开始在同一个页面上。



Answer 2:

这可能让你启动的一些想法:

  1. 通过查询字符串的值
  2. 在会话状态或在一个单独的cookie存储的值
  3. 在HttpContext.Items存储值和使用的Server.Transfer代替Response.Redirect的


Answer 3:

尚未提及尚未使用Server.Transfer的另一种方法,能够使用Page.PreviousPage属性 ,允许访问控件传递控制在页面上。

作为jrista虽然提到的,使用Transfer不更新显示给用户,这可能会或可能不会是一个问题的URL。 例如,用户不能精确书签他们得到转移到自URL将是原来的传输页面的页面。



文章来源: ASP.NET: How to redirect, prefilling form data?