比如:
我的链接是: ?reason=1001#234
得到的Request.QueryString["reason"]是 1001
该怎么办?

解决方案 »

  1.   

    request.rawurl 或者 request.url试试
      

  2.   

    不行,在地址栏里看到的是:test.aspx?reason=1001#234 
    但是request.url确是test.aspx?reason=1001是不是要用其它的方法?
      

  3.   

    http://blog.csdn.net/powerglover/archive/2009/01/04/3705401.aspx
      

  4.   

    发送时:  Response.Redirect("Default3.aspx?reason=" + Server.UrlEncode("1001#234"));
    接收时: Response.Write(Server.UrlDecode(Request.QueryString["reason"]));
    显示:1001#234 
      

  5.   

    request.rawurl 等不行
    估计是编码的时候就出了问题,楼上Server.UrlEncode貌似是个不错的方法。
    可是,我是gridview中的一列做的链接,如下:            HyperLinkField fieldReason = new HyperLinkField();
                string[] hyperstring = { "day","reason" };
                fieldReason.DataNavigateUrlFields = hyperstring;
                fieldReason.DataNavigateUrlFormatString = "?day={0}&reason={1}";
                fieldReason.DataTextField = "reason";
                GridView_similar.Columns.Add(fieldReason);
    该如何使用呢?
      

  6.   

    request.rawurl得到的是乱码,主要我还有中文字符,比如下面这个
    http://localhost:2519/web_trouble/Default.aspx?day=2009-11-11&reason=精轧设定不好,6#LOOP起套过大,废钢
      

  7.   

    脑子犯晕了#代码了 fragment 也就是当前页面结点....request那些是拿不到了...不是编码问题,不过那位兄弟的解决方案是可以的...或者你把#用其他识别符号代替也成...
      

  8.   

    乱码你怕什么.../// <summary>
            /// 判断编码方式
            /// </summary>
            /// <returns>返回是utf8还是gb2312</returns>
            private int JudgeCode()
            {            
                HttpRequest Request = HttpResource.Context.Request;
                int returnValue = (int)(CodeState.utf8);
                if(!string.IsNullOrEmpty(this.GetUrlParam(Request.RawUrl, "keyword")))
                {
                    string urlParam = this.GetUrlParam(Request.RawUrl, "keyword");
                    if (urlParam.IndexOf('%') < 0 || ((urlParam.Split('%').Length-1) % 3 != 0))
                    {
                        returnValue = (int)CodeState.gb2312;
                    }
                    else
                    {
                        returnValue = Utf8Matrix(urlParam.Substring(urlParam.IndexOf('%')+1)) == true ? (int)CodeState.utf8 : (int)CodeState.gb2312;
                    }
                }
                else if (!string.IsNullOrEmpty(this.GetUrlParam(Request.RawUrl, "DealerBizMode")))
                {
                    string urlParam = this.GetUrlParam(Request.RawUrl, "DealerBizMode");
                    if (urlParam.IndexOf('%') < 0 || (urlParam.Split('%').Length % 3 != 0))
                    {
                        returnValue = (int)CodeState.utf8;
                    }
                    else
                    {
                        returnValue = Utf8Matrix(urlParam) == true ? (int)CodeState.utf8 : (int)CodeState.gb2312;
                    }
                }
                return returnValue;
            }        /// <summary>
            /// utf8矩阵判断
            /// </summary>
            /// <param name="original">字符串来源</param>
            /// <returns>bool型</returns>
            private bool Utf8Matrix(string original)
            {
                bool isUtf8 = true;
                string[][] matrix = new string[3][];
                matrix[0] = new string[1] { "e" };
                matrix[1] = new string[4] { "8", "9", "a", "b" };
                matrix[2] = new string[4] { "8", "9", "a", "b" };
                string[] arrayFormOriginal = original.Split('%');
                for (int i = 0; i < arrayFormOriginal.Length; i++)
                {
                    if (IncludeCharacter(arrayFormOriginal[i], matrix[i % 3]) == false)
                    {
                        isUtf8 = false;
                        break;
                    }
                }
                return isUtf8;
            }
    我当年的解决方案....
      

  9.   

     /// <summary>
            /// 转换函数
            /// </summary>
            /// <param name="codeTranslate"></param>
            public void Convert(CodeTranslate codeTranslate)
            {
                HttpRequest Request = codeTranslate.HttpResource.Context.Request;
                HttpServerUtility Server = codeTranslate.HttpResource.Context.Server;
                Request.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                //为了解决escape()编码后 在服务器端无法对(%B7)解码 所以对其进行特殊处理
                string szQueryString = StringHelper.SqlFilter(Server.UrlDecode(codeTranslate.GetQueryString(Request.RawUrl).Replace("%B7", "·")));
                codeTranslate.HttpResource.Context.RewritePath("PriceSearchResult.aspx", null, szQueryString);            
                string szCityId = string.Empty;
                string szBrandId = string.Empty;
                string szKeyword = string.Empty;
                string szUrlRefferrer = string.Empty;
                szKeyword = GetStringValue("Keyword", Request);
                szBrandId = GetStringValue("SearchId", Request);
                szBrandId = (szBrandId==string.Empty?GetStringValue("BrandId", Request):szBrandId);
                szCityId = GetStringValue("CityId", Request);
                if (Request.UrlReferrer != null)
                {
                    szUrlRefferrer = Request.UrlReferrer.ToString();
                }
                SearchCondition.insertData(szCityId, szBrandId, szKeyword, szUrlRefferrer);
                Request.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
            }
      

  10.   

    可以再写个方法单独对reason进行编码,如下:
     protected string getUrl(string str)
        {
            string strBeg = str.Substring(0, str.LastIndexOf("=")+1);
            string strEnd = Server.UrlEncode(str.Remove(0, str.LastIndexOf("=") + 1));
            return strBeg + strEnd;
        }
    再调用:
     fieldReason.DataNavigateUrlFormatString = getUrl("?day={0}&reason={1}");
      

  11.   

    HttpUtility.UrlEncode("").ToString()编码参数
    再HttpUtility.UrlDecode解析
    url="a.aspx?name="+HttpUtility.UrlEncode("#abc")   
      

  12.   

    这个和Server.UrlEncode差不多,关键是我要在HyperLinkField里用算了,其实我这种想法就有问题,换个解决思路,使用ID查找吧
    如果没有更好的方法,我明天结贴