Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何停止我的<;httpErrors>;404“;“执行官”;从破坏我的形式映射?_C#_Asp.net - Fatal编程技术网

C# 如何停止我的<;httpErrors>;404“;“执行官”;从破坏我的形式映射?

C# 如何停止我的<;httpErrors>;404“;“执行官”;从破坏我的形式映射?,c#,asp.net,C#,Asp.net,我有一个自定义的404页面,我遇到了一个问题,404映射破坏了该页面上的表单 我已将我的站点配置为在未找到的每个页面上执行并返回我的自定义404页面: <httpErrors existingResponse="Auto"> <remove statusCode="500" subStatusCode="-1" /> <remove statusCode="404" subStatusCode="17" /> <re

我有一个自定义的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">

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


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

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

我建议您使用
runat=“server”
将该站点搜索表单移动到表单标签之外。原因如下:

  • 然后,新表单将始终提交到您的搜索页面(或者我在它执行JavaScript函数的地方提交)
  • 这将解决人们按“回车”键时出现的任何问题,并且它会提交错误的表单。这样,搜索表单上的“回车”将提交搜索表单,而在表单标签内带有
    runat=“server”
    的表单上的“回车”将提交该表单。。。而且你不必乱动默认按钮或按下回车键

  • 旁注:一个页面上可以有多个表单,但表单中不能有一个表单,并且不能有两个带有
    runat=“server”
    的表单。

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

    Form.Action = "/500.aspx"
    

    为什么你的404页面有回发选项?@MikeSmithDev:这是标题中的“搜索”表单。我真的很想让它发挥作用,因为我假设用户在点击404页面时首先要做的事情之一就是搜索他们最初寻找的内容。谢谢@MikeSmithDev,这是一个很好的建议。我已经将搜索表单从服务器上运行的表单中移出,这就解决了我的问题。