2011-03-08 77 views
2

目标是从传统asp使用发布数据弹出一个asp.net页面,但是,asp.net页面始终有Request.Form变量为空,并显示RequestType get 。发送数据到asp.net页面从传统asp

  1. 我已经全部剥离代码从ASP出来,测试接收从asp.net页面上的HTML页面发送表单变量,并能正常工作。复制相同的HTML表单到ASP页面仍然给

    <html> 
    <head></head> 
    <body> 
        <form method="post" name="form" action="http://localhost:51307"> 
         <input name="uid" value="1" /> 
         <input type="submit" name="Submit" /> 
        </form> 
    </body> 
    

ASP的网站使用了框架没有的Request.Form数据和请求类型获取和形式从子帧中发送,我不确定这是否是问题。

2. 假设这个工作,我曾想过在asp中提交一个表单,并使用表单的onsubmit事件来弹出页面,该页面将发送表单变量作为发布数据。这是做这件事的最好方法吗?

UPDATE 的框架似乎是这里有毛病不知何故,我从形式张贴的框架页面内到另一个传统的ASP页面,然后重定向从这个到asp.net页面。

+0

我想这是因为“跨越不同域的导航窗口和框架”在默认情况下被禁用,这可能意味着您不能通过表单数据出于安全原因。所以,当你不使用帧时,问题现在已经解决了。 – 2011-03-08 15:32:33

+0

是的,它似乎正在工作,但我会想在未来的框架中做到这一点,你可以弹出导航窗口..在一个答案,我会接受它,因为这是真正的问题。 – 2011-03-08 16:10:47

+0

Shadow Wizard - 你想把上面的评论回答给我接受吗? – 2011-03-11 17:41:02

回答

2

这可能是因为IE浏览器默认禁用了“在不同域中导航窗口和框架”,这意味着您由于安全原因无法传递表单数据。

0

ASP.NET需要设置特定的表单域(通常作为隐藏域,尽管HTTP POST显然不知道其差异),因此入站请求被视为有效,从而填充相关变量。

如果我记得,您需要设置__EVENTTARGET,__EVENTARGUMENT和__VIEWSTATE。

然后,您的ASP.NET代码需要能够处理发送的内容,因为默认处理程序预计最少会有__VIEWSTATE中的某些内容。所以,你需要重写页面中的ViewState处理程序。稍后在工作时我可以更新更多的信息,因为我知道我以前做过这个。

+0

然而,这是有道理的,但是,asp.net通常很高兴地接受request.form,并且它在我进入记事本时添加表单,使用方法post添加表单并通过在浏览器中打开此表单提交,但当相同表单处于在框架中的asp页面。 – 2011-03-08 14:41:05

+0

只有当您想要“真正的”PostBack或保留ViewState时,才需要这些东西。否则,ASP.NET中的Request.Form的行为与传统ASP中的行为完全相同。 – 2011-03-08 15:26:59

0

问题在于重定向。当您重定向页面时,它会创建GET请求而不是POST请求,因此不会有任何表单数据。

你的选择是:

  1. 附加形式值的查询字符串。
  2. 动态生成对应于发布的Request.Form集合的表单,并在body onload事件期间使用Javascript将其提交到ASP.NET页面。
+0

从问题和代码判断,他用'method =“post”'点击了表单的提交按钮',所以在这里不是这种情况。 – 2011-03-08 15:51:28

+0

阅读他的更新。他将表单提交到另一个框架中的页面,然后从该框架调用重定向。这会生成获取请求。 – smartcaveman 2011-03-08 15:52:56