问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

URL查询字符串的使用(asp.net & c#)

发布网友 发布时间:2022-04-20 07:03

我来回答

2个回答

热心网友 时间:2022-04-20 08:32

一、使用Querystring
Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
private void 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中添加如下代码:
private void 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事件
代码如下:
private void 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中添加如下代码:
private void Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Session["name"].ToString();
Label2.Text=Session["email"].ToString();
Session.Remove("name");
Session.Remove("email");
}
运行,即可看到传递后的结果了。

三、使用Server.Transfer
虽然这种方法有点复杂,但也不失为一种在页面传值的方式。
举个例子看看:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
private void Button1_Click
(object sender, System.EventArgs e)
{
Server.Transfer("webform2.aspx");
}
4、创建过程来返回TextBox1,TextBox2控件的值代码如下:
public string Name
{
get
{
return TextBox1.Text;
}
}

public string EMail
{
get
{
return TextBox2.Text;
}
}
5、新建一个目标页面命名为webform2
6、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:
private void Page_Load
(object sender, System.EventArgs e)
{
//创建原始窗体的实例
WebForm1 wf1;
//获得实例化的句柄
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail;

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

热心网友 时间:2022-04-20 09:50

URL传递中文的解决方案总结
1.设置web.config文件。
<system.web>
......
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" />
......
</system.web>

或者:
aspx文件中:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

2.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码。
>> 进行传递
string Name = "中文参数";
Response.Redirect("B.aspx?Name="+Server.UrlEncode(Name));

>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));
或者:

NavigateURL='<%# "WebForm2.aspx?Singer=" + HttpUtility.UrlEncode("中国人", System.Text.Encoding.GetEncoding("GB2312")) %>'

3.如果是从 .HTML 文件向 .Aspx 文件进行传递中文参数的话(即不从后台用 Redirect()方法进行 Url 转换)。一样要将传递的中文参数进行编码,在接收时再进行解码。
>> 进行传递
<script language="JavaScript">
function GoUrl()
{
var Name = "中文参数";
location.href = "B.aspx?Name="+escape(Name);
}
</script>
<body onclick="GoUrl()">
>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));

一般来说。设置web.config文件就可以了。但是如果你用 JavaScript 调用 webservice 方法的话(往webservice里面传递中文参数)。设置 web.config 文件好象无效。
————————————————————
在html中实现编解码:

<script language="javascript">
function openUrl(src)
{
var strUrl=escape(src);
window.open(strUrl);
}

function change_url(src)
{
document.location.href=escape(src);
}

</script>

在新窗口保存
<a href='javascript:openUrl("css/合同.doc");' >交合同</a>

当前位置保存,无闪烁。
<a href="#" onclick=BLOCKED SCRIPTchange_url("css/合同.doc")>合同</a>

注意:路径中的斜线是:“/”,而不是“\”,否则也不行啊。

----------------------------------------

前一阵遇到在做.net Web开发时,碰到一个很奇怪的问题,就是Url中,如果将中文字符作为参数值传递时,QueryString得到的值可能会出错。简单的说,比如下面这个Url:
UrlParmTest.aspx?parm1=中国&parm2=中国人
在Request.QueryString时,parm1和parm2得到都是"中国",显然出现了问题,可是在某些情况下却是正常的。

如果请求不是直接通过url,而使用response.redirect在服务器端操作,没有遇到过类似的问题。

当时我想中文是双字节编码,可能传递的时候就是有不确定性,还是用英文好。

可是为什么在server端redirect就是正常的,问题在哪里呢?

昨天我询问在gtec的同学,才大概明白了一些:
如果在.cs文件中设置中文参数,请在中文参数外使用Server.UrlEncode("中文")对中文进行Encode
如果在.aspx文件中设置,请使用<%=Server.UrlEncode("中文")%>进行Encode
在QueryString时,不用再进行Decode,可以获得正常的中文字符串

下面是同学给出的一些解释:
UrlEncode把一些多字节字符转换成url里允许的单字节字符,本来浏览器就会自动做的,但是目前确实存在一些问题,所以自己再Encode一下,在接受端会自动对Url进行Decode。

我想Response.Redirect可能可以确保作Encode的工作,所以没有问题。

参考资料:http://gie23.spaces.live.com/

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胜达这款车百公里油耗多少? 胜达节能油加盟办厂可靠吗是不是骗子 河南洛阳胜达就是骗子,我把钱交了也不来人了,他们一个老总说了爱咋办... 胜达油是个骗局吗 胜达节能油是什么? 叩解度关于叩解的论述 湿重跟湿重有关的打浆磨片 戴尔XPS M1330-950重要参数 如果到别的单位去面试的话 如果人家问起为什么会选择这家公司而离开另外... 学生会被两个部门同时面试怎么办 苹果8plus的屏幕属于中端的吗? iphone8 plus用什么屏幕? 徐州拿着别人的身份证可以办银行业务吗 徐州丰县的农村信用社贷款怎么到现在还没有批啊 是否中了ARP 昨天拿徐州雍和植发院办了一张高额信用贷款身份证信息给他们会不会安全? 徐州的谁可以借钱啊,我想开家店,想借2万-5万,多了20万也可以,但是时间要长。只提供身份证,复印件。户 徐州哪里有正规的身份证贷款 没有财富值了,我想小额贷款,我就身份证,拿了钱就去上班,我是徐州的,怎么就没人贷给我? 中介介绍去徐州办理贷款,对方要求留身份证,银行卡,u盾,银行留的手机号码卡在他那里,银行卡刚办的 徐州身份证,南京工作,在哪可贷款 求《给孩子读诗》全文免费下载百度网盘资源,谢谢~ 如何安排自己每天的学习?怎么拟定一份具体的时间表? 316L和316不锈钢有区别吗?316L不锈钢做水管是不是更好一些些? 生活饮用给水管可以采用304/316L不锈钢管吗 316L不锈钢水管好不好用? 316l不锈钢是食品级吗 手机为何把耳机控制按钮剪掉插头就不起作用了? 中国古往今来中国科技发明 火箭发射速度是每小时多少公里 SL205箱变代表什么意思 家里突然没电了那个欠压保护器光量一个红灯是怎么回事? 自复式过欠压保护器亮红灯怎么恢复 突然断电,没有跳闸,过欠压保护器红灯一直亮着半个小时了没有复位,要怎么办? 欠压保护器红灯绿灯都亮出线零钱有电怎么回事? 谁有个人简历表格模板,一般的就行了。谢谢 课程改革的历史发展状况及评价 如何进行课改 我国新课改的现状如何?存在哪些问题? 中国一共进行了几次课程改革? 如何看待新课改 小果冻电子烟一直烧烧坏了怎么办? 蒟蒻小果冻的制作步骤 小果冻电子烟一直烧烧坏了怎么办 《麻雀》中李小男是什么身份? 《麻雀》电视剧中的“李小男”是什么身份的人? 电视剧麻雀里的李小南是个什么角色 麻雀电视剧里面所有人的真实身份 麻雀中陈深什么时候和道李小男是上线医生 什么是妊娠合并动脉导管未闭啊