为什么生产服务器上的表单操作属性为空?

时间:2010-04-12 09:07:15

标签: asp.net ajax asp.net-ajax

将ASP.NET WebForms应用程序部署到生产服务器后,一些ajax调用已停止为我工作。经过一些调试后,我发现以下语句(在内部客户端方法WebForm_DoCallback中)导致了问题:

xmlRequest.open("POST", action, true);

问题似乎是action-variable是空的,所以在检查渲染的html之后我发现在生产服务器上呈现的form-tag看起来像:

<form method="post" action="" id="Form1">

但是,在我的开发人员计算机上,我得到以下内容:

<form method="post" action="default.aspx" id="Form1">

那么,为什么action-attibute会在我的dev.machine上渲染但不在生产服务器上渲染?这似乎仅适用于一个特定的Web表单,当我在其他页面上查看action-attribute正确呈现时。

任何建议或想法都会有所帮助!

3 个答案:

答案 0 :(得分:2)

我也有这个问题。我在生产的Windows 2003 R2服务器上安装了dot net framework 4,在IIS6上运行了应用程序,将它的框架设置为4.0,将它放在它自己的应用程序池中,然后我就明白了。我也注意到它没有将jscript加载到我的登录页面,所以也许这是一个安全问题?

有趣的是,当我通过选择网站网址进入默认页面时 http://mysite 行动没有放入 但是当我直接使用实际页面(即使它呈现完全相同的内容)时,它会正确地执行操作。

无论如何,我的解决方法是将表单设置为runat = server(它可能已经是),然后将服务器上的Action属性设置为当前的Page.Path(可能是一个不同的属性,我忘了)和这解决了这个特殊问题。

但是,我确实遇到了针对dot net 4框架的重大更改文档,该文档讨论了action属性的消隐: http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes 请参阅标题为“IIS 7或IIS 7.5集成模式下的默认文档中不会引发事件处理程序”一节

答案 1 :(得分:0)

我可能会离开,但因为你要求任何建议......

我对ASP知之甚少,但在PHP中,post变量是从输入的name属性传递的,而不是表单本身的id属性。例如:

<form id="test" method="post" action="test.php">
    <fieldset>
        <input name="firstname" type="text" />
        <input name="lastname" type="text" />
    </fieldset>
</form>

在server_side上,如果你这样做了:

 print_r($_POST);

你会得到:

 Array (
    [firstname] => Joe
    [lastname] => Smith
 )

除此之外,唯一想到的是:

  1. 确保您的表单有效(HTML本身),
  2. 检查您的DTD是否设置为严格或过渡,
  3. 通过测试多个变量来测试问题是否是浏览器端,
  4. 使用预设值输入type="hidden"输入,以查看是否返回服务器。
  5. 我怀疑这是否会解决问题,但我希望至少有一个建议可以揭示导致解决方案的一些方面。

答案 2 :(得分:0)

.NET 3.5 Service Pack 1 introduced some breaking changes regarding HTMLForm中的ASP.NET,因此可能值得检查两个服务器是否具有完全相同的框架版本。

  

“ASP.NET的早期版本总是如此   如果是,则忽略action属性   出现在声明性标记中   一个元素。开发人员应该   从他们的删除动作属性   声明性标记返回   ASP.NET的原始行为   呈现回发网址。“

值得一试。