100分 Request.QueryString 参数丢失

成都锦福工作室 2010-03-09 02:57:32
平常可以不在登录的情况下,访问某些页面,比如addUser.aspx
当选择登录后,为了用户体验,通常都会跳转到登录之前的页面,所以是这样构造URL的:login.aspx?from=addUser.aspx
使用Response.Redirect(Request.QueryString["from"])即可实现跳转

但如果本身页面就含有参数,如修改用户界面,那么URL是这样的:login?from=modifyUser.aspx?uid=xxx&name=yyy
这个时候使用Requst.QueryString["from"]时,只能得到:modifyUser.aspx?uid=xxx

请问各位,有什么好的解决办法吗?
...全文
177 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
珺珺 2010-03-10
  • 打赏
  • 举报
回复
if (Session["UserName"].ToString() == "")
{
Response.Redirect(string.Format("../Login.aspx?url={0}", HttpContext.Current.Request.Url.ToString()));
}
上面是没登陆的时候跳转

下面是在LOGIN页面里写
string url = Request.QueryString["url"].ToString();
if (url != "")
{
Response.Redirect(url);
}

zcl24 2010-03-09
  • 打赏
  • 举报
回复
解码:
Response.Write(HttpUtility.UrlDecode(Request.QueryString["from"]));

编码:
Response.Redirect("Default.aspx?from="+ HttpUtility.UrlEncode("login?from=modifyUser.aspx?uid=xxx&name=yyy ") +"&cc=de");
小y的CSDN博客 2010-03-09
  • 打赏
  • 举报
回复
login?from=modifyUser.aspx?uid=xxx&name=yyy

因为URL根据&截断。才会出现这种情况。

可以将&用其他字符替换,然后再目标页面解析出来。

jawettren 2010-03-09
  • 打赏
  • 举报
回复
login?from=modifyUser.aspx?uid=xxx&name=yyy
URL参数标记格式就是?符号和&符号
?后为第一个参数,遇到&后为第二个参数。。。。。
你的这段URL被认为包含了2个参数,from 和 name,第2个?被解析为参数值使用


要么干脆login?from=modifyUser.aspx&uid=xxx&name=yyy
或者像楼上的解答uid 和 name 中的字符换成其他字符。
zetee 2010-03-09
  • 打赏
  • 举报
回复
菜鸟一只。多看看书。把&变成URL编码
阿非 2010-03-09
  • 打赏
  • 举报
回复
为什么&不替换 会丢失参数

-------------------

会被解析成下一个参数
guyehanxinlei 2010-03-09
  • 打赏
  • 举报
回复
引用 5 楼 sandy945 的回复:
url 编码 在解码

UP
  • 打赏
  • 举报
回复
引用 6 楼 softcoke_320 的回复:
引用 1 楼 criedshy 的回复:
你把from=modifyUser.aspx?uid=xxx&name=yyy
里的&用别的符号代替,使用时再转换过来
你说的对 但请问为什么会有这样的现象呢?


继续问,为什么&不替换 会丢失参数?
  • 打赏
  • 举报
回复
引用 1 楼 criedshy 的回复:
你把from=modifyUser.aspx?uid=xxx&name=yyy
里的&用别的符号代替,使用时再转换过来

你说的对 但请问为什么会有这样的现象呢?
阿非 2010-03-09
  • 打赏
  • 举报
回复
url 编码 在解码
ck11926375 2010-03-09
  • 打赏
  • 举报
回复
引用 1 楼 criedshy 的回复:
你把from=modifyUser.aspx?uid=xxx&name=yyy
里的&用别的符号代替,使用时再转换过来


这个建议不错!!!
hitlcyu19 2010-03-09
  • 打赏
  • 举报
回复
引用 1 楼 criedshy 的回复:
你把from=modifyUser.aspx?uid=xxx&name=yyy
里的&用别的符号代替,使用时再转换过来

&&代替&试试吧 呵呵
fengxuemofa6 2010-03-09
  • 打赏
  • 举报
回复
先把本身页面参数销毁,然后跳转到登陆页面。
criedshy 2010-03-09
  • 打赏
  • 举报
回复
你把from=modifyUser.aspx?uid=xxx&name=yyy
里的&用别的符号代替,使用时再转换过来
程序的学习是一个循序渐进的过程,一些常用的或经典代码应该保存下来以便日后使用。本文就给出一些.net的经典代码,希望对大家有所帮助……   1.弹出对话框.点击转向指定页面   Response.Write("");   Response.Write("");   2.弹出对话框   Response.Write("");   3.删除文件  string filename ="20059595157517.jpg"; pub.util.DeleteFile(HttpContext.Current.Server.MapPath("../file/")+filename);   4.绑定下拉列表框datalist System.Data.DataView dv=conn.Exec_ex("select -1 as code,'请选择经营模式' as content from dealin union select code,content from dealin");   this.dealincode.DataSource=dv;   this.dealincode.DataTextField="content";   this.dealincode.DataValueField="code";   this.dealincode.DataBind();   this.dealincode.Items.FindByValue(dv[0]["dealincode"].ToString()).Selected=true;   5.时间去秒显示 <%# System.DateTime.Parse(DataBinder.Eval(Container.DataItem,"begtime").ToString()).ToShortDateString()%>   6.标题带链接 <%# ""+ DataBinder.Eval(Container.DataItem,"proname")+""%>   7.修改转向 <%# ""+"修改"+""%>   8.弹出确定按钮 <%# ""+"删除"+""%>   9.输出数据格式化 "{0:F2}" 是格式 F2表示小数点后剩两位 <%# DataBinder.Eval(Container, "DataItem.PriceMoney","{0:F2}") %>   10.提取动态网页内容   Uri uri = new Uri("http://www.webjx.com/");   WebRequest req = WebRequest.Create(uri);   WebResponse resp = req.GetResponse();   Stream str = resp.GetResponseStream();   StreamReader sr = new StreamReader(str,System.Text.Encoding.Default);   string t = sr.ReadToEnd();   this.Response.Write(t.ToString()); 11.获取" . "后面的字符   i.ToString().Trim().Substring(i.ToString().Trim().LastIndexOf(".")+1).ToLower().Trim()   12. 打开新的窗口并传送参数:   传送参数:   Button1.Attributes.Add("onclick","return confirm('确认?')"); button.attributes.add("onclick","if(confirm('are you sure...?')){return true;}else{return false;}")   接收参数:   string a = Request.QueryString("id");   string b = Request.QueryString("id1");   13.为按钮添加对话框   Button1.Attributes.Add("onclick","return confirm('确认?')");   button.attributes.add("onclick","if(confirm('are you sure...?')){return true;}else{return false;}")   14.删除表格选定记录   int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];   string deleteCmd = "Delete from Employee where emp_id = " + intEmpID.ToString()   15.删除表格记录警告   private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e)   {   switch(e.Item.ItemType)   {   case ListItemType.Item :   case ListItemType.AlternatingItem :   case ListItemType.EditItem:   TableCell myTableCell;   myTableCell = e.Item.Cells[14];   LinkButton myDeleteButton ;   myDeleteButton = (LinkButton)myTableCell.Controls[0];   myDeleteButton.Attributes.Add("onclick","return confirm('您是否确定要删除这条信息');");   break;   default:   break;   }   }   16.点击表格行链接另一页   private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)   {   //点击表格打开   if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)   e.Item.Attributes.Add("onclick","window.open('Default.aspx?id=" + e.Item.Cells[0].Text + "');");   }   双击表格连接到另一页   在itemDataBind事件中   if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)   {   string orderItemID =e.item.cells[1].Text;   e.item.Attributes.Add("ondblclick", "location.href='../ShippedGrid.aspx?id=" + orderItemID + "'");   }   双击表格打开新一页   if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)   {   string orderItemID =e.item.cells[1].Text;   e.item.Attributes.Add("ondblclick", "open('../ShippedGrid.aspx?id=" + orderItemID + "')");   }   16.表格超连接列传递参数   <asp:HyperLinkColumn Target="_blank" headertext="ID号" DataTextField="id" NavigateUrl="aaa.aspx?id=' <%# DataBinder.Eval(Container.DataItem, "数据字段1")%>' & name='<%# DataBinder.Eval(Container.DataItem, "数据字段2")%>' />   17.表格点击改变颜色 if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)   {   e.Item.Attributes.Add("onclick","this.style.backgroundColor='#99cc00';   this.style.color='buttontext';this.style.cursor='default';");   }   写在DataGrid的_ItemDataBound里 if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)   {   e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#99cc00';   this.style.color='buttontext';this.style.cursor='default';");   e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='';this.style.color='';");   }   18.关于日期格式   日期格式设定   DataFormatString="{0:yyyy-MM-dd}"   我觉得应该在itembound事件中 e.items.cell["你的列"].text=DateTime.Parse(e.items.cell["你的列"].text.ToString("yyyy-MM-dd"))   19.获取错误信息并到指定页面   不要使用Response.Redirect,而应该使用Server.Transfer   // in global.asax   protected void Application_Error(Object sender, EventArgs e) {   if (Server.GetLastError() is HttpUnhandledException)   Server.Transfer("MyErrorPage.aspx");   //其余的非HttpUnhandledException异常交给ASP.NET自己处理就okay了 :)   }   Redirect会导致post-back的产生从而丢失了错误信息,所以页面导向应该直接在服务器端执行,这样就可以在错误处理页面得到出错信息并进行相应的处理   20.清空Cookie   Cookie.Expires=[DateTime];   Response.Cookies("UserName").Expires = 0 21.自定义异常处理   //自定义异常处理类   using System;   using System.Diagnostics;   namespace MyAppException   {   ///   /// 从系统异常类ApplicationException继承的应用程序异常处理类。   /// 自动将异常内容记录到Windows NT/2000的应用程序日志   ///   public class AppException:System.ApplicationException   {   public AppException()   {   if (ApplicationConfiguration.EventLogEnabled)LogEvent("出现一个未知错误。");   }   public AppException(string message)   {   LogEvent(message);   }   public AppException(string message,Exception innerException)   {   LogEvent(message);   if (innerException != null)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧