zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

Net中文ASP地址解决方案 参数 两种 url
2023-06-13 09:14:14 时间
在Web.comfig中配置是一样的:
<globalizationrequestEncoding="gb2312"responseEncoding="gb2312"/>
页面Header部分也都有
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
真是奇怪,
只好用了笨办法:
写参数:
复制代码代码如下:

stringstrurl=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!
写一个方法放在基类页面中
复制代码代码如下:
publicvoidPageLocation(stringchineseURL)
{
if(chineseURL==null||chineseURL.Trim().Length==0)
{return;//还可能不是一个合法的URLTony2007/11/15
}
Page.ClientScript.RegisterStartupScript(this.GetType(),"AgronetPageLocationTo","<scripttype="text/javascript"language="javascript">window.location.href=""+chineseURL+"";</script>");
}

然后在页面中调用
复制代码代码如下:
stringstrurl=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后台代码进行对话,可以这样:
复制代码代码如下:
<scriptlanguage="JavaScript">
functionGoUrl()
{
varName="中文参数";
location.href="B.aspx?Name="+escape(Name);
}
</script>
<bodyonclick="GoUrl()">

接收:
复制代码代码如下:
stringName=Request.QueryString["Name"];
Response.Write(HttpUtility.UrlDecode(Name));

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