如何阻止我的<httperrors> 404“ExecuteURL”映射中断我的表单?</httperrors>

时间:2013-09-17 00:41:52

标签: c# asp.net

我有一个自定义的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),则将回发邮寄到/ xyz - 当然,这不是实际页面,因此我们会被重定向到我们的404 在进行表单处理之前。结果,onclick永远不会被调用。

猜测我需要以某种方式强制表单操作指向实际页面(/404.aspx)而不是缺少页面(/ xyz) - 但我该怎么办是什么?

2 个答案:

答案 0 :(得分:1)

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

我建议您使用runat="server"移动表单标记的的网站搜索表单。原因如下:

  1. 然后,新表单将始终提交到您的搜索页面(或者我已经在执行JavaScript功能的地方完成了此操作)。
  2. 这将解决您按下“输入”并提交错误表单的人遇到的任何问题。这样,搜索表单上的“输入”将提交搜索表单,并在表单标签内的表单上“输入”runat="server"将提交该表单...而且您不必乱用默认按钮或按下按钮。
  3. 附注:您可以在页面上放置多个表单,而不是表单中的表单,并且不能在其上放置两个带有runat="server"的表单。

答案 1 :(得分:0)

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

Form.Action = "/500.aspx"