ASP.NET HTML表单失败

时间:2010-07-02 19:19:39

标签: asp.net html vb.net http iis-6

我们刚刚提出了一个显示奇怪错误的新ASP.NET页面。 错误显示在下一页中,就好像数据不在表单中一样。 当用户返回并刷新页面并重新提交表单时,它可以正常工作 稍微有点背景,这个源是从具有负载均衡器和IIS-6的8个Web服务器的虚拟目录中提供的。 VB.NET的版本是2005.问题似乎是浏览器独立(它发生在IE和Firefox上)。 表单对象是纯HTML,因为它们是完全根据前几页的答案动态生成和格式化的,这是从ASP的转换。

包含失败对象的表单存根如下:

<FORM ACTION="NextPage.aspx" METHOD="post" ID="frmAddComments" NAME="frmAddComments">
    <SELECT NAME="SubReason1" ID="SubReason1">
        <OPTION VALUE="">Select A Reason For This Return</OPTION>
        <OPTION VALUE="BP11">Arrived Defective</OPTION>
        <OPTION VALUE="BP12">Not Compatible</OPTION>
        <OPTION VALUE="BP13">Stopped Working</OPTION>
    </SELECT>
    <TEXTAREA NAME="comment1" ID="comment1" ROWS="3" COLS="45"></TEXTAREA>
    <SELECT NAME="SubReason2" ID="SubReason2">
        <OPTION VALUE="">Select A Reason For This Return</OPTION>
        <OPTION VALUE="BP11">Arrived Defective</OPTION>
        <OPTION VALUE="BP12">Not Compatible</OPTION>
        <OPTION VALUE="BP13">Stopped Working</OPTION>
    </SELECT>
    <TEXTAREA NAME="comment2" ID="comment2" ROWS="3" COLS="45"></TEXTAREA>
    <INPUT TYPE="submit" VALUE="Continue">
</FORM>

我主要是在寻找要问的问题。


修改 问题让我思考 - 表格中有几个加密项目被接收并正确验证。这就是他们不在存根中的原因。任何故障都将被重定向到故障页面,而这种情况并未发生。只有未加密的数据是空白的。


编辑加密是RC4,MD5和DES-3的混合 - 所有加密字段显示为十六进制,包括名称/ ID和值。匹配加密/解密的任何失败都将导致页面显示错误。那种情况没有发生。


修改 此页面还显示ViewState的问题。它现在关闭了。
修改 事务转储显示故障不会更改服务器。我只显示一个更改服务器的条目。

2 个答案:

答案 0 :(得分:1)

我会问的问题包括:

  1. 你是如何保持国家的?你在使用进程内会话吗?我问,因为用户可能会从一台服务器退回到另一台服务器。您是否尝试过切换到基于cookie的会话?

  2. 您可以在页面加载上放置一个记录器来保存Request对象中的所有内容。具体来说,提交的所有表单字段?

  3. 究竟是什么错误信息?

  4. 修改
    如果某些价值即将来临,则这是一种奇怪的情况。你是如何解密数据的?而且,底层的Request对象本身是什么?您如何访问这些字段以确定它们“不存在”?在管道中的哪一点是解密发生?是否会破坏请求对象的其余部分?

答案 1 :(得分:1)

我遇到了类似的问题,花了几天才弄明白。我正在将一个应用程序从ColdFusion移植到.NET 3.5,该页面似乎回发了,但大部分请求都丢失了。

问题在于,表单元素没有标记为runat="server"标记嵌套在标有runat="server"的表单标记内。

我的解决方案很简单:我删除了基于html的表单元素并依赖于主窗体。您的问题听起来略有不同,因为您正在动态构建表单。根据我在那段时间的研究,我了解到表单元素不应该嵌套,每页只有一个可以是服务器端。

MSDN Magazine有一篇文章,其中有几个选项可以在一个页面上显示多个表单: http://msdn.microsoft.com/en-us/magazine/cc164151.aspx#S4

但是,如果您发布的生成的表单相当简单,您可以考虑生成控件并使用asp:Button控件的PostbackUrl属性来设置应该提交回发的页面

一个例子,摘自MSDN

  <form id="form1" runat="server">

    <h3>Button.PostBackUrl Example</h3>

    Enter a value to post:
    <asp:textbox id="TextBox1" 
      runat="Server">
    </asp:textbox>

    <br /><br />

    <asp:button id="Button1" 
      text="Post back to this page"
      runat="Server">
    </asp:button>

    <br /><br />

    <asp:button id="Button2"
      text="Post value to another page" 
      postbackurl="Button.PostBackUrlPage2cs.aspx" 
      runat="Server">
    </asp:button>

  </form>

请注意,点击第一个按钮会回发到当前页面,然后单击第二个按钮会回发到Button.PostBackUrlPage2cs.aspx并包含在Request对象的文本框中输入的值。