当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net中url地址传送中文参数时的两种解决方案

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET 中的 asp.net中url地址传送中文参数时的两种解决方案


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 51 ::
收藏到网摘: n/a

前天遇到一个地址传递中文参数变为乱码的问题,同样的两个web Project,一个是vs2003,一个是vs2005,前者可以,后者就是不可以。 在Web.comfig中配置 是一样的:
<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>
页面Header部分也都有
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
真是奇怪,
只好用了笨办法:
写参数:
复制代码 代码如下:

string strurl = PreUrl + "?word={0}&sort={1}&check={2}";
strurl = string.Format(strurl, HttpUtility.UrlEncode(this.txtSearchTxt.Text.Trim(), System.Text.Encoding.GetEncoding("GB2312")), this.radioSortDesc.SelectedIndex.ToString(), CheckState.ToString());
Page.Response.Redirect(strurl);
//注意编码方式为gb2312

读参数:
复制代码 代码如下:

try
{ if (Page.Request.QueryString["word"] != null)
{ _word = Convert.ToString(HttpUtility.UrlDecode(Page.Request.QueryString["word"], System.Text.Encoding.GetEncoding("GB2312"))); }
}
catch { _word = String.Empty; }
///注意编码方式为gb2312,与前面对应

后来,看了孟子的文章,才发现有更好的解决方案:
用Javascript!
写一个方法放在基类页面中
复制代码 代码如下:

public void PageLocation(string chineseURL)
{
if(chineseURL==null || chineseURL.Trim().Length==0 )
{return;//还可能不是一个合法的URL Tony 2007/11/15
}
Page.ClientScript.RegisterStartupScript(this.GetType(), "AgronetPageLocationTo", "<script type='text/javascript' language='javascript'> window.location.href='"+chineseURL+"';</script>");
}

然后在页面中调用
复制代码 代码如下:

string strurl = PreUrl + "?word={0}&sort={1}&check={2}";
strurl = string.Format(strurl, this.txtSearchTxt.Text.Trim(), this.radioSortDesc.SelectedIndex.ToString(), CheckState.ToString());
PageLocation(strurl);

注意后种方法用了Javasrcipt,实际应用在分页时需要保持中文参数,最好还是用window.Location.Href方法!
最后,如果一要在javascript与.net后台代码进行对话,可以这样:
复制代码 代码如下:

<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(HttpUtility.UrlDecode(Name));

要点是:
将传递的中文参数进行编码,在接收时再进行解码。
完。