一般页面传递参数用 page2.aspx?a=xxx&b=yyy 这样的方式来向page2.aspx传递参数,现在有个特殊情况向page2.aspx传递参数的时候不能用post方式,也不能在程序中指定用get方式,只能限定用页面地址的形式传递参数,但是不能使用"?"这个符号,这个要怎么解决?

解决方案 »

  1.   

    也不能用session,HtmlEncode的方式正在测试不知道行不行,不过估计可能也不行,因为中间要经过第三方,他们会把"?"过滤掉,现在还不能确定他们是不是会把它解码再过滤
      

  2.   

    假如连session也不能用的话,尝试一下写到一个文件里面,然后激活另外一个页面在那个文件里读取信息。。不过没做过,只能纸上谈兵。
      

  3.   

    http://community.csdn.net/Expert/topic/4476/4476626.xml?temp=.1676142
    去顶一下我贴子
    我告诉你。写一个类库。用方法去传参数就行
      

  4.   

    HtmlEncode也不行,这个比较特殊,因为是第三方控制的,他们不会查我们的session,也不会读我们的文件,只会读url,而且不能用"?"
      

  5.   

    页面模型是这样的 a -> b -> c (a和c是我们,b是第三方)我们按某个规范在a.aspx里面指定(发出请求)
    href= "b.aspx?para1=xxx&para2=zzz&ReturnUrl=c.aspx#para1=000&para2=111"
    (b.aspx)是第三方页面他们接收到请求后会对参数后面的字符串(ReturnUrl=c.aspx#para1=000&para2=111")进行检查,然后转向到我们的页面c.aspx,也就是他检查通过后会进行这样的操作Response.Redirect("c.aspx#para1=000&para2=111")但是他们要求我们在ReturnUrl后面不能有“?”
    而且这个规范是不能变的
      

  6.   

    更正一下:
    href= "b.aspx?para1=xxx&para2=zzz&ReturnUrl=c.aspx#para3=000&para4=111"
    (b.aspx)是第三方页面第三方检查通过后:
    Response.Redirect("c.aspx#para3=000&para4=111")
      

  7.   

    to: xooe()
    可是不能用"?",现在c.aspx接收不到参数,我都没办法判断是哪一条记录啊
      

  8.   

    UrlReWrite ?
    给点恩路吧,这个不是很熟
      

  9.   

    #跟?具有同等作用啊
    上面的Response.Redirect("c.aspx#para3=000&para4=111")
    后,你在c.aspx中照样可以取到 para3 的值为 000
    para4的值为111吧
      

  10.   

    在ASP.NET中实现Url Rewriting
    http://www.cnblogs.com/xspin/archive/2004/08/06/30788.aspx
      

  11.   

    to CheerDesiger():
    我这边试了#和?好像不一样,比如Request.Url.AbsoluteUri 就是获取不了#后面的参数,而?后面的是可以的
      

  12.   

    使用无Cookies的Session,也就是将Session写入到地址栏里面。不晓得这样能否达到你的要求?比如原来的页面是:http://www.myWebSite.com/a.aspx使用后会变成:
    http://www.myWebSite.com/(rt235dfg352shr335)/a.aspx其中的中间的括号里面的内容是你的Session。这样他不会过滤了吧?具体作法是在Web.config文件中的SessionState节点下的一个bool值改一下(那个值忘了叫啥了。我现在在外面一台没有.net的机器上面,没法查看.好像名字叫NoCookies啥的)。
      

  13.   

    to Cnapollo() :
    正在看,以前听说过有这一回事,初次实践,谢谢。
      

  14.   

    类似:
    2.aspx/id=123/index=456/test=efr
    这样的请求
    然后  this.Request.Url.ToString() 中提取出来。#region 广告开始  CSDN小助手 V2.5,更快、更爽、更方便的浏览CSDN论坛!
      界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
      下载:http://szlawbook.com/csdnv2#endregion
      

  15.   

    to szlfybb() :
    对,那个叫cookieless="true" 可以使用url来标志session,不过现在还不能确定别人用这个sessionid可不可以和我共享一个session,还是会重新分配一个sessionid给他,我再试试
      

  16.   

    to szlfybb()
    刚试了,这样是可以的,其他人用包含我本机的sessionid的地址打开这个页面,它的sessionid是不会变化(当前页面) 打开其他页面会生成一个新的sessionidto Qqwwee_Com()
    这方法太好了!
      

  17.   

    UrlReWriter,用这个太好了,完全解决楼主的问题
      

  18.   

    Server.Transfer("Webform2.aspx");.net2.0里有这样的功能跨页面数据发送:
    如果你需要多个页面发送数据到同一个表单程序进行处理,或者数据在多个页面之间传输处理的话,你就可以使用ASP.NET 2.0这个新特性。例如,我打算把Default.aspx页里TextBox1里的文本数据发送到Default2.aspx页面进行处理:
    Default.aspx页:
    <%@ Page Language="C#" %>
    <script runat="server">
        void Button2_Click(object sender, EventArgs e)
        {
            Label1.Text = "Hi," + TextBox1.Text + ". This is Default.aspx";
        }
    </script><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
            <asp:Button ID="Button1" Runat="server" Text="PostToAnotherPage" PostBackUrl="~/Default2.aspx" />
            <asp:Button ID="Button2" Runat="server" Text="PostToSelf" OnClick="Button2_Click" />
            <br />
            <asp:Label ID="Label1" Runat="server" Text="Label"></asp:Label>
        </form>
    </body>
    </html>
    Default2.aspx页:
    <%@ Page Language="C#" %>
    <script runat="server">
        void Page_Load(object sender, System.EventArgs e)
        {
            TextBox textBox1 = (TextBox)PreviousPage.FindControl("TextBox1");
            this.Label1.Text = "Hi," + textBox1.Text + ". This is Default2.aspx!";
        }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:label id="Label1" runat="server"></asp:label>
        </form>
    </body>
    </html>
      

  19.   

    将参数放在http请求里。
    你可以试试用cookie的原理,cookie就是将本地的信息打包到http请求里,然后到服务器端保持连接的。
      

  20.   

    看这个链接讲了http请求消息的格式:
    http://www.5dmail.net/html/2005-11-9/200511901556.htm这种方法要求第三方写一定的代码,其实最快的方法让他们写cookie你们读cookie。注意把cookie的过期时间设置为0,这样不会在本地产生文件,cookie信息只会保留在请求内容中,请求响应完毕会就会消失
      

  21.   

    页面模型是这样的 a -> b -> c (a和c是我们,b是第三方)我们按某个规范在a.aspx里面指定(发出请求)
    href= "b.aspx?para1=xxx&para2=zzz&ReturnUrl=c.aspx#para1=000&para2=111"
    (b.aspx)是第三方页面他们接收到请求后会对参数后面的字符串(ReturnUrl=c.aspx#para1=000&para2=111")进行检查,然后转向到我们的页面c.aspx,也就是他检查通过后会进行这样的操作Response.Redirect("c.aspx#para1=000&para2=111")但是他们要求我们在ReturnUrl后面不能有“?”
    而且这个规范是不能变的
    =====================================================================================不能有?也是合理的,毕竟你向b.aspx也传递了参数,
    既然b.aspx的处理流程不在自己的控制中,一个好的办法是Url ReWrite,就是Url重写,
    对于b.aspx?para1=xxx&para2=zzz&ReturnUrl=c.aspx#para1=000&para2=111,
    楼主想要是把那个“#”换成正确的"?"吧,不过直接传的话,很明显是不行的,
    这时就可以用Url重写来解决,
    定义一个c_para1value_para2value.aspx指向c.aspx?para1=para1value&para2=para2value的转换,这样就成了
    a ==> b.aspx?para1=xxx&para2=zzz&ReturnUrl=c_000_111.aspx
    b ==> c_000_111.aspx
    到c.aspx时,系统已经“偷偷”将c_000_111.aspx转换成了
    c.aspx?para1=000&para2=111
    这样,不就达到传递参数的目的了嘛
      

  22.   

    怎么楼上的好几个说的那么眩乎呀。
    很简单的事情,有必要说那么复杂吗。.NET都帮你想好了,只是自己知道是怎么回事就是。POST的时候:
    HttpUtility.UrlEncode(“你要传的字符串含?号的”)REQUEST的时候:
    直接Request就是你的值了。
      

  23.   

    1.定义一个接口
    2.自己写一个继承这个接口的
    3.所有页面的基类都继承自BASEPAGE类
      

  24.   

    url重写,楼主可以看我的blog http://www.goodnt.com/edisonblog