.net 页面传参方式总结

一、使用Querystring

Querystring是一种非常简单的传值方式,其缺点就是:安全性低。会把要传送的值显示在浏览器的地址栏中(也就是不需要保密得参数),并且在此方法中不能够传递对象,参数的长度不能大于 1024字节(?),当参数中有中文得时候,通常需要使用HttpUlitity.UrlEncode方法来对参数进行编码和解码。

优点:速度快。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
3、为button按钮创建click事件
代码如下:


privatevoid Button1_Click
(object sender, System.EventArgs e)
{
string url;
url="webform2.aspx?name="+ 
    TextBox1.Text +"&email="+ 
    TextBox2.Text;
Response.Redirect(url);
}

4、新建一个目标页面命名为webform2
5、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:


privatevoid Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}

运行,即可看到传递后的结果了。

二、使用Session变量

使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。举个例子看看:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
3、为button按钮创建click事件
代码如下:


privatevoid Button1_Click
(object sender, System.EventArgs e)
{
          Session["name"]=TextBox1.Text;   
          Session["email"]=TextBox2.Text;   
          Response.Redirect("webform2.aspx");
}

4、新建一个目标页面命名为webform2
5、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:


privatevoid Page_Load
(object sender, System.EventArgs e)
{
         Label1.Text=Session["name"].ToString();
         Label2.Text=Session["email"].ToString();
         Session.Remove("name");
         Session.Remove("email");
}

运行,即可看到传递后的结果了。

这种方法得优缺点是:使用Session变量往往会占用服务器端的内存使用,所以再网页流量很大的时候,Session便不能很好的完成传值得任务,由于session有一个timeout,所以在使用的时候对用户得操作也有一定的影响。

三、使用Server.Transfer

虽然这种方法有点复杂,但也不失为一种在页面传值的方式。使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的.
举个例子看看:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
3、为button按钮创建click事件
代码如下:


privatevoid Button1_Click
(object sender, System.EventArgs e)
{
         Server.Transfer("webform2.aspx");
}

4、创建过程来返回TextBox1,TextBox2控件的值代码如下:


publicstring Name
{
  get
   {
    return TextBox1.Text;
   }
}

publicstring EMail
{
  get
   {
    return TextBox2.Text;
   }
}

5、新建一个目标页面命名为webform2
6、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:


privatevoid Page_Load
(object sender, System.EventArgs e)
{
        //创建原始窗体的实例
         WebForm1 wf1;
        //获得实例化的句柄
         wf1=(WebForm1)Context.Handler;
         Label1.Text=wf1.Name;
         Label2.Text=wf1.EMail;
}

运行,即可看到传递后的结果了。

这种方法 优缺点是:需要写一些额外的代码创建一些属性,但是它简洁清晰,并且是面向对象的。

四、Application

因为应用程序和它存储的所有对象可以同时由不同的线程访问,所以最好只将很少修改的数据与应用程序范围一起存储。理想情况是,对象在 Application_Start 事件中初始化,对它的进一步访问是只读的。 
在下面的示例中,文件在 Application_Start(在 Global.asax 文件中定义)中读取,内容则以应用程序状态存储在 DataView 对象中。


void Application_Start() 
{
      DataSet ds =new DataSet();
      FileStream fs =new FileStream(Server.MapPath("schemadata.xml"),FileMode.Open,FileAccess.Read);
      StreamReader reader =new StreamReader(fs);
      ds.ReadXml(reader);
      fs.Close();
      DataView view =new DataView(ds.Tables[0]);
      Application["Source"] = view;
}

在 Page_Load 方法中,DataView 随后被检索并用于填充 DataGrid 对象:


void Page_Load(Object sender, EventArgs e) 
{
      DataView Source = (DataView)(Application["Source"]);
      MyDataGrid.DataSource = Source;
}

此解决方案的优点是只有第一个请求付出检索数据的代价。所有后面的请求则使用已有的 DataView 对象。由于数据自初始化后从不修改,所以不必为序列化访问做任何规定。

Application得使用一般是相对于整个项目来说相对静止的变量,比如数据库连接变量等。对于那些针对每一个用户,每一个会话未必一样得变量就不适用了。通常Application变量得值是在Config终指定。也可以在global.ascx中指定。

五、Cookie:

下面的示例说明如何使用客户端 Cookie 存储易失的用户首选项。 
在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一。Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一起发送到服务器。浏览器对 Cookie 的大小有限制,因此,只有不超过 4096 字节才能保证被接受。 
当数据存储在客户端时,文件 cookies1.aspx 中的 Page_Load 方法检查客户端是否已发送了 Cookie。如果没有,则创建并初始化一个新的 Cookie 并将其存储在客户端:


protectedvoid Page_Load(Object sender, EventArgs e) 
{
     if (Request.Cookies["preferences1"] ==null)
      {
          HttpCookie cookie =new HttpCookie("preferences1");
          cookie.Values.Add"ForeColor", "black");
          Response.AppendCookie(cookie);
      }
}

在同一页上,再次使用 GetStyle 方法提供存储在 Cookie 中的个别值:


protected String GetStyle(String key)
{
    HttpCookie cookie = Request.Cookies["preferences1"];
   if (cookie !=null)
    {
     switch (key)
      {
       case"ForeColor" :
             return cookie.Values["ForeColor"];
             break;
       }   
     }   
    return"";
}

若要使 Cookie 在会话之间持久,必须将 HttpCookie 类上的 Expires 属性设置为将来的某个日期。除了 Cookie.Expires 的赋值,下列自定义 .aspx 页上的代码与上一个示例相同:


protectedvoid Submit_Click(Object sender, EventArgs e) 
{
      HttpCookie cookie =new HttpCookie("preferences2");
      cookie.Values.Add("ForeColor",ForeColor.Value);
      cookie.Expires = DateTime.MaxValue; // Never Expires
      Response.AppendCookie(cookie);
      Response.Redirect(State["Referer"].ToString());
}

Cookie作为一种提交,请求时保存数据得方式,又很明显的优缺点。他的缺点在上面有所表述,比如大小受限,不能保存对象等,另外,作为保存时间,也就 是数据得有效期来说,确是保存得最好的。我们可以通过设置cookie得过期时间等属性来设置。Cookie又很多常用属性,包括domain,path 等,这些资料可以在quickstart上获取到。

六、ViewState:

ASP.NET 为每个控件提供视图状态的服务器端注记。控件可以使用类 StateBag 的一个实例上的 ViewState 属性,在请求之间保存它的内部状态。StateBag 类提供词典样式的接口来存储与字符串键关联的对象。 
文件 pagestate1.aspx 显示一个可见的面板并使用键 PanelIndex 在该页的视图状态下存储它的索引:


protectedvoid Next_Click(Object sender, EventArgs e ) 
{
      String PrevPanelId ="Panel"+ ViewState["PanelIndex"].ToString();
      ViewState["PanelIndex"] = (int)ViewState["PanelIndex"] +1;
      String PanelId ="Panel"+ ViewState["PanelIndex"].ToString();
}

注意,如果在多个浏览器窗口中打开该页,每个浏览器窗口最初将显示此名称面板。每个窗口可以独立地在面板之间定位。 
小结
1. 使用应用程序状态变量存储很少修改但经常使用的数据。 
2. 使用会话状态变量存储特定于某个会话或用户的数据。数据全部存储在服务器上。这种方法适于短期的、大量的或敏感的数据。 
3. 将少量易失数据存储在非持久性 Cookie 中。数据存储在客户端,在每次请求时发送到服务器,并在客户端结束执行时失效。 
4. 将少量非易失数据存储在持久性 Cookie 中。数据存储在客户端直到失效,并在每次请求时发送到服务器。 
5. 将少量请求特定的数据存储在视图状态中。数据从服务器发送到客户端并返回。

时间: 2024-08-08 17:53:45

.net 页面传参方式总结的相关文章

Vue 页面传参方式 Query 和 Params

1. query 与 params 传参 query ????需要和配合 path 属性使用,携带参数会拼接在请求路径后,效果同 Get 请求方式 http://localhost:8033/Permission/Role/Form?productCode=crm-operate&roleId=1&roleName=admin&roleType=-1&roleDesc=%E7%AE%A1%E7%90%86%E5%91%98 params ????需要配合 name 属性使用

Javaweb的七大传参方式和以及各自特点

学习jsp一段时间,觉得还是需要把自己学习一些东西整理了一下,第一次发东西,还请各位多多支持 1.表单提交 html自带的from方法,简单易懂,便于操作,依靠于<from>标签中的type="submit"进行表单传输,或者根据js进行控制提交表单.其中由method属性决定以post或者get方式进行提交. jsp代码: 1 <form id="test" action="testservlet" method="

react中的传参方式

react是一个SPA模式,即组件嵌套租,在一个单页面的应用中组件间的数值传递是必不可少的,主要的传参方式大致有一下几种: 1,在挂载的地方给组件传参 ReactDOM.rander(<a name='a' age={16}/>,app) 在渲染的时候,直接给挂载的组件传参. 2,父子传参 父子传参可以用props和ref两种方式,1,props方式传参,父组件通过改变自己的参数并且通过props将状态传递给子组件,并在子组件中显示.2,通过ref传参,这种方式是通过子组件自己的方法改变自己的

SpringMVC的五种请求传参方式

1.传统传参方式 方法参数中使用request,通过request.getParameter("参数名"),再封装到bean中 @RequestMapping("/test01") public ModelAndView test01(HttpServletRequest request){ String username = request.getParameter("username"); String password = request.

SpringMVC——接收请求参数和页面传参

转自:http://blog.csdn.net/z69183787/article/details/41653875 1.接收请求请求 (1)使用HttpServletRequest获取,如request.getParameter("name") (2)@RequestParam("pass")String password,或@Param("pass")String password.表单参数也可以用这种方式获取,Spring会自动将表单参数注

页面传参中文乱码解决方案

jsp页面传递参数到servlet,只要参数有中文就是乱码,大多数是??????乱码,尝试了网上比较普遍的好多种办法都不行,最后加了一句话解决掉,分享给大家. 1.打开tomcat安装目录 2.找到conf文件夹 3.打开里面的server.xml 4.找到 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443

angualr $http 页面传参问题

POST 请求传参 $http({ method: "POST", url: url, data: { "role_id": 1, "telephone": $scope.setData.telephone, "user_pwd": $scope.setData.user_pwd }, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, trans

java 传参方式--值传递还是引用传递

java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因依赖“按引用传递”这一行为而导致的常见编程错误. 对此节选的某些反馈意见认为,我把这一问题搞糊涂了,或者将它完全搞错了.许多不同意我的读者用 C++ 语言作为例子.因此,在此栏目中我将使用 C++ 和 Java 应用程序进一步阐明一些事实. 要点 读完所有的评论以后,问题终于明白了

vue请求中 post get传参方式是不同的哦

我在学习vue,项目中post请求,get请求都用到了,我发现传参方式是不一样的. post请求的例子: checkin (){ this.$http.post('my url',{ mobilePhone:this.phone, password:this.password },{ emulateJSON: true } ).then(function(res){ this.$root.userid=res.data.userid; console.log(this.$root.userid)