none
.net4.5 关于QueryString传值中文参数的问题 RRS feed

  • 问题

  • <asp:HyperLinkField DataNavigateUrlFields="ID" DataNavigateUrlFormatString="chakan.aspx?ID={0}" Target="_blank" Text="查看" />
    详页
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetDataByfbr" TypeName="fyDataSetTableAdapters.fyTableAdapter">
                    <SelectParameters>
                        <asp:QueryStringParameter Name="ID" QueryStringField="ID" Type="String" />
                    </SelectParameters>
                </asp:ObjectDataSource>

    点击“查看”时,如果{0}为英文时详页数据显示一切正常,但是如果为中文时,详页数据无显示。

    仔细查看地址栏传值为“http://localhost:1505/xjfc2012/zhongjiepinggu/zhongjiefangyuan.aspx?ID=新中国”并无乱码出现,但是详页就是没数据,为什么。

    更离奇的是同样的传值,你打开首次详页没有任何显示,但你再次点击“查看”时,新开的页面却有数据显示,这是为什么。另外 这样的情况还不确定,有时候存在有时候不存在(源代码未改变)。

    另外我也试用了DataTextFormatString="<%=Server.UrlEncode({0})%>"  但问题也还是存在的。

    我的环境:.net 4.5


    绝不不懂装懂,不因为自己的问题低级而感到不好意思,踏踏实实的虚心学习。



    2012年11月9日 13:10

答案

  • 数据库中具体我要注意那里

    修改Web.Config或 machine.config中什么标签啊 

    以保证一致啊。

    谢谢,可以的话请明确指示。


    绝不不懂装懂,不因为自己的问题低级而感到不好意思,踏踏实实的虚心学习。

    太不厚道了。。。。竟然取消了 枉我这么认真回复

    <system.web>
            <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />
    </system.web>



    Willin.org


    2012年11月22日 1:27
  • 尝试在某个Page页面重写Page_OnInit代码,这样写:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CSharp.WebForm1" %>
     
    <!DOCTYPE html>
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
      
            </div>
        </form>
    </body>
    </html>
    

    后台代码:

    public partial class WebForm1 : System.Web.UI.Page
        {
            protected override void OnInit(EventArgs e)
            {
                Response.ContentEncoding = Encoding.GetEncoding("gb2312");
                Request.ContentEncoding = Encoding.GetEncoding("gb2312");
                base.OnInit(e);
            }
        }

    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年11月24日 1:52

全部回复

  • 你在Debug的时候,设置几个断点,看看后台收到后是什么值,urldecode之后是什么值,是不是中文的。

    这样的情况很少出现,但是保险起见,你可以用数字ID作为参数传递到后台去查询。或者通过GUID进行查询。


    www.willin.org

    2012年11月11日 14:38
  • 非常感谢您的回答 最近有些忙 没及时回复 实在抱歉。

    我现在的问题是,我这个查询是用数据集完成的  这个数据集包含了两个表, 这两个表唯一的关联的就是这个中文的“ID”,现在是我没有选择。

    另外我遇到的这个情况是真实存在的,虽然如您所说,很少出现,但现在就真实的摆在了我的面前。

    请问怎样才能解决这个问题啊?

    另外源码在测试编译时没问题。已发布就会出现类似的问题,或者我是否应该注意下iis7的细节??


    绝不不懂装懂,不因为自己的问题低级而感到不好意思,踏踏实实的虚心学习。

    2012年11月20日 16:46
  • 编码环境查看一下,要与数据库一致。

    可以在Web.Config或 machine.config中配置



    Willin.org

    2012年11月21日 0:43
  • 数据库中具体我要注意那里

    修改Web.Config或 machine.config中什么标签啊 

    以保证一致啊。

    谢谢,可以的话请明确指示。


    绝不不懂装懂,不因为自己的问题低级而感到不好意思,踏踏实实的虚心学习。

    2012年11月21日 15:05
  • 数据库中具体我要注意那里

    修改Web.Config或 machine.config中什么标签啊 

    以保证一致啊。

    谢谢,可以的话请明确指示。


    绝不不懂装懂,不因为自己的问题低级而感到不好意思,踏踏实实的虚心学习。

    太不厚道了。。。。竟然取消了 枉我这么认真回复

    <system.web>
            <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />
    </system.web>



    Willin.org


    2012年11月22日 1:27
  • 冤枉啊,不是不厚道,只是之前我的问题,大大并没有解释清楚也没有指点正确的对策啊。所以我没法标记答案啊。

    不过谢谢大大的耐心解释。还有谢谢大大的认真回复。由衷的谢谢。

    一旦问题解决,我一定会标记答案的。不只是为了我自己,为了同样需要帮助的人,也为了尊重和感谢各位大大为回复付出的劳动。

    另外,只要是我提问的问题,如果大大给过能解决问题的答案,我是一定都标记了答案的。  这个请各位大大放心。 滴水之恩当涌泉相报,更何况只是标记下答案。

    2012年11月23日 16:03
  • 数据库中具体我要注意那里

    修改Web.Config或 machine.config中什么标签啊 

    以保证一致啊。

    谢谢,可以的话请明确指示。


    绝不不懂装懂,不因为自己的问题低级而感到不好意思,踏踏实实的虚心学习。

    太不厚道了。。。。竟然取消了 枉我这么认真回复

    <system.web>
            <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />
    </system.web>



    Willin.org



    首先谢谢大大的回复。 但是即便按照贵大大的system.web修改后,测试中问题还是存在的。但是这次有个规律,就是点击3次“查看”时,数据不能显示,但前3个网页不关闭的情况下,第4次点击“查看”,数据就能正常的显示出来。这是何故。

    绝不不懂装懂,不因为自己的问题低级而感到不好意思,踏踏实实的虚心学习。

    2012年11月23日 16:12
  • 尝试在某个Page页面重写Page_OnInit代码,这样写:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CSharp.WebForm1" %>
     
    <!DOCTYPE html>
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
      
            </div>
        </form>
    </body>
    </html>
    

    后台代码:

    public partial class WebForm1 : System.Web.UI.Page
        {
            protected override void OnInit(EventArgs e)
            {
                Response.ContentEncoding = Encoding.GetEncoding("gb2312");
                Request.ContentEncoding = Encoding.GetEncoding("gb2312");
                base.OnInit(e);
            }
        }

    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年11月24日 1:52
  • 不睬你了。自己试吧

    Willin.org


    你好,虽然他没采纳..但是这样回答不符合msdn精神哦,我把你这条记录删了,请理解!

    认真的活,认真的爱!

    2012年11月24日 4:03
    版主
  • 根据最近两位大大的指点,我使用

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

    并加入

    <system.web>
           
    <globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312" />
    </system.web>

    后问题解决。目前一切正常。

    需要提醒大家的是,这里我并没有使用“编程志愿者”大大提供的后台代码,但是system.web不能缺。

    public partial class WebForm1 : System.Web.UI.Page
        {
    protected override void OnInit(EventArgs e)
    {
    Response.ContentEncoding = Encoding.GetEncoding("gb2312"); Request.ContentEncoding = Encoding.GetEncoding("gb2312"); base.OnInit(e);
    }
    }

    问题分析为可能是因为之前我用“utf-8”这个编码导致不匹配,不一致导致的。但具体何时采用哪种编码形式本人还是不太明白,如果大大们有时间望给讲解下。

    在此特向,编程志愿者和Willin Wang对我的帮助表示衷心的感谢。


    绝不不懂装懂,不因为自己的问题低级而感到不好意思,踏踏实实的虚心学习。




    2012年11月24日 14:17
  • 一般有中文的采用gb2312比较多。如果有阿拉伯文啥的混合一般用uft-8。

    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年11月25日 2:04