0

我希望我可以很好地解释这一点,而不必发布大量来源。

我在在线商店中有一个页面,可让用户选择游览日期。该页面有一个包含几个面板的 ConLib。第一个是:

<asp:Panel ID="pnl_Grid" runat="server">
        <cb:SortedGridView ID="VariantGrid" runat="server" 
            AutoGenerateColumns="False" Width="100%"
            SkinID="PagedList" DataKeyNames="OptionList">
            <Columns>
            </Columns>
        </cb:SortedGridView>
    </asp:Panel>

然后是另一个带有其他东西的 asp:Panel - 日历、按钮等。SortedGridView 由我们的购物车提供商提供,基本上是一个常规的 asp:Grid。

当用户说他们想要 3 张票时,我会做

pnl_Grid.Enabled="false" 

以防止他们在选择日期/时间后更改它。在不同的点,他们可以单击重置按钮,该按钮将执行许多操作,但一项任务是在网格文本框中将值设置为零并启用网格,因为他们重置了流程并想要选择新事物。

我已经使用断点逐步完成了代码,似乎我遇到的问题是我的重置按钮单击事件处理程序在页面渲染阶段以禁用状态渲染网格后触发。如果这是真的,那么在后面的代码中设置网格将永远不会在页面上显示启用的网格而无需刷新,因为它已经呈现。如果我手动刷新页面,它确实显示为已启用,所以我认为我的问题是正确的。

我的问题是双重的,如果这里有足够的信息来回答它:
1. 我认为我所看到的是否可能是真的 - 页面呈现控件禁用,然后按钮处理程序尝试启用它,但为时已晚那一点,因为控件已经呈现?
2. 我该如何解决这个问题?如果可能的话,我宁愿避免使用 JQuery……它对我们原始商店软件的编写方式有一些意想不到的副作用。

更多信息:
我有一个状态标志 _EventSelected ,它告诉您是否选择了日历事件。在重置按钮上单击我将其设置为 false,在 PreRender 上我检查它是否为 false 并启用网格。同样,状态不会改变,直到 Reset Button Click 事件处理程序,也就是PreRender 之后。

感谢您的输入!我发誓,有些时候 ASP.NET 对我来说非常有意义,而有些时候它就像泥巴一样清晰。

4

1 回答 1

1

我找到了一个可行的解决方案。为了在按钮启用 Grid 后强制页面刷新,没有刷新就不会显示,我将它添加到 btn_Reset_Click 处理程序中,通过搜索“导致页面重新加载”找到:

Page.Response.Redirect(Page.Request.Url.ToString(), false);

这不是一个糟糕的解决方案,因为无论如何我都处于重置/重新启动状态。感谢您花时间阅读我的问题!希望有一天这会对其他人有所帮助。

于 2013-09-20T19:22:04.417 回答