在开始页面中:当客户端点击LinkButton lbtnEditText
<asp:LinkButton ID="lbtnEditText" runat="server" Text="Edit Text" CommandArgument='<%# Eval("Path") + "," + Eval("Name")%>' OnCommand="Button1_Click"></asp:LinkButton>
背后的代码:
protected void Button1_Click(object sender, CommandEventArgs e)
{
string[] values = e.CommandArgument.ToString().Split(',');
string queryString =
"editpage.aspx?path="
+ values[0];
string newWin =
"window.open('" + queryString + "');";
ClientScript.RegisterStartupScript
(this.GetType(), "pop", newWin, true);
}
queryString
完全是= "editpage.aspx?path=D:\\C#Projects\\website\\Lecturer\\giangvien\\profile.xml"
(我在调试时检查)
但是在目标页面(弹出窗口)中:editpage.aspx
string path = Request.QueryString["path"];
string content = File.ReadAllText(path);
if(content!=null)
textarea.Value = content;
有错误:Could not find file 'D:\C#Projects\website\C
尝试调试,我收到的path
只是:"D:C"
在editpage.aspx
显示地址栏中
http://localhost:41148/website/editpage.aspx?path=D:C#ProjectswebsiteLecturergiangvienprofile.xml
帮助!!!当我将路径传递给编辑页面时,为什么路径会发生变化?
答案 0 :(得分:2)
背后发生的原因是::你传递的是查询字符串数据,它有意想不到的字符'\,#'。 对此的解决方案是转义并在设置为查询字符串值
之前对此值进行编码答案 1 :(得分:2)
对于正在进行网站开发的人来说,正确编码网址是不可缺少的技能......
#
之后的所有内容都是Url的“哈希”部分,浏览器不需要将其发送到服务器。更正式的名称是fragment identifier。
您需要做的是正确编码path
查询参数的值(即在JavaScript中使用encodeURIComponent
函数)。
答案 2 :(得分:1)
为您提供C#的实际解决方案:
string queryString = "editpage.aspx?path=" + System.Web.HttpUtility.UrlEncode(values[0]);
请参阅编码http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx
的参考资料并解码http://msdn.microsoft.com/en-us/library/system.web.httputility.urldecode%28v=vs.110%29.aspx