将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正确呈现时。
任何建议或想法都会有所帮助!
答案 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
)
除此之外,唯一想到的是:
type="hidden"
输入,以查看是否返回服务器。我怀疑这是否会解决问题,但我希望至少有一个建议可以揭示导致解决方案的一些方面。
答案 2 :(得分:0)
.NET 3.5 Service Pack 1 introduced some breaking changes regarding HTMLForm中的ASP.NET,因此可能值得检查两个服务器是否具有完全相同的框架版本。
“ASP.NET的早期版本总是如此 如果是,则忽略action属性 出现在声明性标记中 一个元素。开发人员应该 从他们的删除动作属性 声明性标记返回 ASP.NET的原始行为 呈现回发网址。“
值得一试。