1

我维护一个小型金融网站。该网站的一部分允许某些用户执行银行账户对账,清算已输入并显示在银行对帐单上的行。这个特定的页面让我有些头疼,因为,似乎是随机的,当用户提交核对数据,甚至只是更改他们正在使用的帐户和日期时,该站点将丢失他们正在使用的 ClientId。这充其量只是有点烦人。最坏的情况是浪费了大量时间,因为他们刚刚检查过的所有线路都必须重新检查。

ClientId是保存在Session里面的,所以我第一个想到的就是Session丢失了或者Application被回收了。但是,只有 ClientId Session 变量(存储为“ActiveClient”)丢失;PortalId 之类的其他内容仍然存在(这实际上用于从网站上的严重错误中恢复),所以这不是问题。然后我想是因为该页面在回发时提交了太多数据(我不得不MaxHttpCollectionKeys为这个页面提高两次,现在是 5000,尽管我最近更改了数据传递方式以将键数量减少一半)。但是,这也不是问题,因为我收到的错误报告还包括只有几十个密钥的提交,或者当他们更改正在使用的日期/帐户时只有少数几个。

它发生在不同的时间,它不会每次都发生(作为页面提交的百分比,我会说它大约是 5-10%),并且唯一似乎在所有错误中保持不变的是它们'来自 FireFox 和 Chrome,而不是 Internet Explorer。但是,我们的办公室主要使用这两种方法。仅当员工遇到必须使用它的站点时才使用 IE 。我已经让我的一位同事尝试切换到 IE,但与此同时我仍在尝试找出其他线索。

该页面设置有两个 ListView,一个用于 Credits,一个用于 Debits。它们为金融系统中的每个交易明细行显示一行,其中列出了有关交易的简要信息,并为用户提供了将其标记为已清除的选项(或者,如果调用以前的对帐单,则将其标记为未清除)。

<ItemTemplate>
    <tr class='<%# UseFutureDateClass(Eval("TrxDate")) %> <%# Container.DisplayIndex  % 2 == 1 ? "alt" : "" %>'>
        <td>
            <asp:CheckBox ID="ClearLine" runat="server" Checked='<%# IsCleared(Eval("DateCleared")) %>' />
            <asp:HiddenField ID="IdentSet" runat="server" Value='<%# Eval("NRecord") + "," + Eval("LineNo") + "," + IsCleared(Eval("DateCleared")) %>' />
        </td>
        <td><asp:Label ID="TrxDateLabel" runat="server" Text='<%# Eval("TrxDate","{0:MM/dd/yyyy}") %>' /></td>
        <td><asp:Label ID="HeaderReference" runat="server" Text='<%# Eval("HeaderReference") %>' /></td>
        <td><asp:Label ID="VendorInfoLabel" runat="server" Text='<%# Eval("VendorInfo.VendorName") %>' /></td>
        <td><asp:Label ID="Label2" runat="server" Text='<%# Eval("Description") %>' /></td>
        <td class="money">
            <asp:Label ID="Amount" runat="server" Text='<%# FormatInvertMoney(Eval("Amount")) %>' />
        </td>
    </tr>
</ItemTemplate>

首先<td>包含在表单提交上为每一行发布的信息。提交后,页面将解析 IdentSet 并仅在该行之前已清除而现在未清除时才采取行动,反之亦然。从那里它将更新财务文件以将该行标记为已清除或未清除;如果所有更新均成功,则将帐户标记为已在给定日期对给定日期相关期间进行对帐。

如果有人认为会有帮助,我可以发布更多代码;但是,正如我之前所说,当用户只是更改帐户和日期时也会发生此问题,因此我认为问题不在于代码本身。作为参考,下面是 ActiveClient 属性的代码,在名为“Working”的静态类中维护:

public static String ActiveClient {
    get {
        String s = (String)HttpContext.Current.Session["ActiveClient"];
        return s ?? String.Empty;
    }
    set { HttpContext.Current.Session["ActiveClient"] = value; }
}

tl; dr:一个,只有一个,页面有时会丢失一个,并且(显然)只有一个,提交时的会话变量,我不知道为什么或如何停止它。

4

0 回答 0