2

我有一个自定义 404 页面,我遇到了一个问题,即 404 映射会破坏该页面上的表单。

我已将我的网站配置为在未找到的每个页面上执行并返回我的自定义 404 页面:

 <httpErrors existingResponse="Auto">
      <remove statusCode="500" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="17" />
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" responseMode="ExecuteURL" />
      <error statusCode="404" subStatusCode="17" path="/404.aspx" responseMode="ExecuteURL" />
      <error statusCode="500" path="/500.aspx" responseMode="ExecuteURL" />
 </httpErrors>

我的母版页包含一个包含所有内容的表单:

<form runat="server">

如果我去 /xyz (即不是一个真实的页面),表单动作被指定为指向那个不存在的页面:

<form method="post" action="xyz?404%3bhttp%3a%2f%2fsite.example.com%3a80%2fsite%2fxyz" id="ctl01">

因此,如果我在该页面上提交回发(例如按钮 onclick),则回发会被 POST 到 /xyz - 当然,这不是实际页面,因此在表单处理发生之前我们会被重定向到 404 . 因此,onclick 永远不会被调用。

我需要以某种方式强制表单操作指向实际页面(/404.aspx)而不是丢失的页面(/xyz)——但我该怎么做呢?

4

2 回答 2

1

根据您的评论,您的问题在于您的母版页上的站点搜索表单。

我建议您将该站点搜索表单移到带有runat="server". 原因如下:

  1. 然后,新表单将始终提交到您的搜索页面(或者我已经在它执行 JavaScript 函数的地方完成了它)。
  2. 这将解决人们按下“输入”并提交错误表单时遇到的任何问题。这样,搜索表单上的“输入”将提交搜索表单,而表单标签内的表单上的“输入”runat="server"将提交该表单......而且您不必乱用默认按钮或捕捉输入-按钮按下。

旁注:您可以在一个页面上拥有多个表单,而不是一个表单中的一个表单,并且您不能runat="server"在它们上拥有两个表单。

于 2013-09-17T00:55:08.870 回答
0

我发现另一个可行的选择是将论坛操作重定向到正确的 URL。快速简便的解决方案。

Form.Action = "/500.aspx"
于 2013-10-17T23:28:34.683 回答