2011-07-26 28 views
1

如果我通过为什么在URL <字符之前>#<字符之后>只读<字符之前>只有我查询字符串?

const string strEditParams = "TaskID={0}&TaskName={1}"; 
       string strEditValues = string.Format(strEditParams, 
                lbl.Text 
                , "$#hello"              
                ); 
       lnkBtn.Attributes.Add("onClick", "return OpenEditTask('test.aspx?" + strEditValues + "')"); 

从page1.aspx这个到Test.aspx文件,并在Test.aspx文件的页面加载,如果我做

if(!IsPostBack) 
     { 
      var pp = Request["TaskName"].ToString(); 

     } 

我只得到$。

为什么在查询字符串中,我在这种情况下只获得$而不是“TaskName”(#之前的字符)#的完整值以及如何解决这个问题?

感谢

回答

2

在URL中,#字符引入了fragment identifier。它必须被编码以用于查询字符串本身。

您可以自己进行编码:

string strEditValues = string.Format(strEditParams, lbl.Text, "$%23hello"); 

或者使用HttpServerUtility.UrlEncode()

string strEditValues = string.Format(strEditParams, lbl.Text, 
    Server.UrlEncode("$#hello")); 
2

那是因为#在网址中有特殊字符,它标志着片段ID。

您必须将其编码为%23以将其作为参数传递或使用UrlEncode。

您的代码看起来是这样的:

lnkBtn.Attributes.Add("onClick", "return OpenEditTask('test.aspx?" 
    + Server.UrlEncode(strEditValues) + "')"); 

这将正确地从strEditValues编码任何特殊字符。

+0

我即使Server.HtmlEncode(strEditValues)尝试,但没有结果..请帮助 – mcUser

+1

'HtmlEncode'doesn对你没有帮助,你需要'UrlEncode'来代替。 –

+2

并且请注意,您应该始终使用URL编码将任何字符串注入查询字符串参数中。 '#'是一个会让你感动的角色,但是远不止这个角色。 – bobince

相关问题