怎样解决asp.net URL传值出现错误的问题(2)_.Net教程
教程Tag:暂无Tag,欢迎添加,赚取U币!
推荐:解读asp.net常用正则表达式一、字段 表达式 格式示例 说明 数字^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$(425)-555-0123425-555-01234255550123验证美国电话号码。 名称[a-zA-Z’`-\s]{1,40}JohnDoeO’Dell验证名称。最多允许使用40个大写字母和小写字母,以及一些在名称中常用的特殊字符
但是这样的传递中文可能还会遇到其他中文字出问题,最好是采用下面的方法将中文参数编码。
3. 我采用URLEncode()编码,采用URLEncode()不在Web.config中设置好像也可以,在我的测试中没有问题,但是为了安全,我们还是添加上上面的设置。
3.1.
页面上都是一致的,第一页面的后台代码:
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string url; string name; url = "Default2.aspx?Name="; name = "DK51+700中继站"; name = name.Replace("+", "@"); HyperLink1.NavigateUrl = url + Server.UrlEncode(name); } } |
3.2.
第二个页面中,后台代码:
public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string name = Request.QueryString["Name"]; name = name.Replace("@", "+"); name = name.Replace("%", "站"); Label1.Text = name; } } |
3.3.结果是:“DK51+700中继站”。正确!
后来我在网上找到这个这样的设置,在Web.config中设置:
<system.web> <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" /> </system.web> |
但是这样的传递中文可能还会遇到其他中文字出问题,最好是采用下面的方法将中文参数编码。
我采用
4.1.页面上都是一致的,第一页面的后台代码:
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string url; string name; url = "Default2.aspx?Name="; name = "DK51+700中继站"; name = name.Replace("+", "@"); HyperLink1.NavigateUrl = url + Server.UrlEncode(name); } } |
4.2 第二页面的后台代码:
public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string name = Request.QueryString["Name"]; name = Server.UrlDecode(name); name = name.Replace("@", "+"); Label1.Text = name; } } |
4.3 结果是:“DK51+700中继站”。正确!
注意:一定要前后对应,比如在这里,第一页面中是先编码的,后替代,第二页面中就要先替代,再解码,不然就会出错,如:“DK51 700中继站”
我在开头提到,遇到了比较多的问题:
1. 网上的资料有的说是用“%20”来替代“+”,但是我尝试了下,结果却是错误的: “DK51 700中继站”,这是什么原因呢?是网上说错了吗?但是在下面的情况中,又很让我苦笑不得,不知道具体是什么原因。
2. 接上面,还是用“%20”来替代“+”;我在一次错误的输入,在第一页面后台输入了name = Server.UrlEncode(name);第二页面中解码是 name = Server.HtmlDecode(name);居然是结果对的,“DK51+700中继站”。我换了其他的替代字符,结果也是正确的。
但是我换了其他编码和解码组合:Server.HtmlEncode(name)和Server.UrlDecode(name),或者Server.HtmlEncode(name)和Server.HtmlDecode(name)组合,结果就不对。连中文都不对:“DK51 700中继口”。
3. 我采用Server.HtmlEncode(name)和Server.HtmlDecode(name)组合,要得到正确的结果,必须用像“@“这样的特殊字符来替代“+”,当然还有在Web.config中添加设置,设置内容如上。
4. 我在查资料的时候还有提到一种方法;不需要在Web.config中添加设置,在aspx文件中添加:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> |
我尝试了,没成功。
5. 我还有个疑问是,在这里,我是用“@”的特殊字符来代替“+”,因为在我的字符串中是不可能出现“@”,才这样做的。但是如果我的字符串中可能出现这些特殊字符串,我又该如何替代呢?
6. 我在经历了这些测试后,觉得最安全的方法,在URL中传递参数时,最好还是使用URLDecode()方法。在Web.config中配置上
<system.web> <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" /> </system.web> |
配置这个是需要注意,你的程序中的字符集是不是也用这个“
今天理解到了测试时需要很有耐心的,在这个问题中,正确的方法就是可能就是一两种,但是为了测试错误的情况,我做了七八种情况,比如URLEncode,URLDecode和HtmlEncode,HtmlDecode的组合问题,传递时和接收时,编码,替代,解码,的先后顺序。这些花了很多时间,篇幅太多,这里就写这些。
分享:.net编程中常见错误详解1:command调用存储过程的时候,如果输出是dataset,selectcommand的command对象的connection先要指出,否则catch一辈子也是空的.. 2:存储过程的varchar字段如果是x.x的这种格式,容易出现细微的傻错误,注意不要漏了[]. 3:如果ascx文件的默认服务器控件的事件不重
相关.Net教程:
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP发送Email实例(可带附件)
- js实现广告漂浮效果的小例子
- asp.net Repeater 数据绑定的具体实现
- Asp.Net 无刷新文件上传并显示进度条的实现方法及思路
- Asp.net获取客户端IP常见代码存在的伪造IP问题探讨
- VS2010 水晶报表的使用方法
- ASP.NET中操作SQL数据库(连接字符串的配置及获取)
- asp.net页面传值测试实例代码
- DataGridView - DataGridViewCheckBoxCell的使用介绍
- asp.net中javascript的引用(直接引入和间接引入)
- 三层+存储过程实现分页示例代码
- 相关链接:
- 教程说明:
.Net教程-怎样解决asp.net URL传值出现错误的问题(2)。