【问题标题】:Why is the form action attribute empty on production server?为什么生产服务器上的表单操作属性为空?
【发布时间】:2010-04-12 09:07:14
【问题描述】:

在将 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">

那么,为什么动作属性会在我的 dev.machine 上呈现,而不是在生产服务器上?这似乎只适用于一种特定的 Web 表单,当我查看其他页面时,动作属性会正确呈现。

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

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    我可能已经走了,但既然你问了任何建议......

    我对 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>
    

    在服务器端,如果你这样做了:

     print_r($_POST);
    

    你会得到:

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

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

    1. 确保您的表单经过验证(HTML 本身),
    2. 检查您的 DTD 是否设置为 Strict 或 Transitional,
    3. 通过测试多个变量来测试问题是否出在浏览器端,
    4. 输入带有预设值的type="hidden",以查看是否会返回到服务器。

    我怀疑这是否能解决问题,但我希望至少我的一个建议能揭示导致解决方案的某些方面。

    【讨论】:

      【解决方案3】:

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

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

      值得一试。

      【讨论】:

      • 这听起来是个好主意,但显然框架版本完全相同......我已经通过在客户端的 onload 事件中分配动作属性临时解决了这个问题,但我会继续看它..真的很奇怪的行为...
      猜你喜欢
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      相关资源
      最近更新 更多