【问题标题】:Event to save data in ViewState before postback回发前在 ViewState 中保存数据的事件
【发布时间】:2010-10-14 16:10:52
【问题描述】:

我正在寻找在 DropdownList 自动回发之前触发的事件,以在 ViewState 中保存 Listbox 项目(使用 JS 填充)。

我尝试了OnSelectedIndexChanged 事件,但它触发得太晚了。

这可以做到吗?如何做到?

【问题讨论】:

  • 您是否尝试通过客户端代码修改视图状态?

标签: c# asp.net


【解决方案1】:

使用 ViewState 无法做到这一点。 ViewState 由服务器设置。客户端无法在 JavaScript 中修改。

建议使用 JavaScript 或 jQuery 选择以下选项之一:

  • 修改隐藏输入
  • 修改一个cookie值

然后,您可以在页面回发后检测这些更改。

设置您的下拉菜单以修改隐藏元素。

$(document).ready(function() {
      $('#<%=DropDownList1.ClientID %>').change(function() { 

         $("#myHiddenInput").val("changed!");

      });
});

....
<input type="hidden" id="myHiddenInput" />

您的 DropDownList 将照常发回。

【讨论】:

    【解决方案2】:

    在页面加载之前发生以下所有事件:

    • 预初始化
    • 初始化
    • 初始化完成
    • 预加载

    查看ASP.NET Page Lice Cycle 了解更多信息。

    LoadViewState 发生在页面的加载周期中,因此请查看之前的事件。

    另外,您是否考虑过使用TrackViewState 方法?可能正是您在这种情况下所需要的...

    【讨论】:

      【解决方案3】:

      您尝试过OnChange 事件吗?看看this post
      更新:使用隐藏字段将自定义数据传递到服务器端。您不能修改视图状态。
      另外,there is a nice post 由 Scott Mitchell 撰写。

      【讨论】:

      • 我不能使用像“OnChange”这样的JS事件,因为我需要保存到ViewState(服务器端)...
      • 好吧,我认为你走错了方向。后面代码中的 EVERY 方法,将在回发 之后触发。实际上,说你想在回发之前在后面的代码中触发一个方法是没有任何意义的。你必须使用 JS 才能在回发之前调用方法。
      • 在进行回发之前在服务器端做一些事情就像在你还在床上的时候做早餐的培根。 (除非您使用的是 ajax,但我认为这不适用于这个问题)
      【解决方案4】:

      我知道您已经为这个问题标记了答案,但我认为您提出问题的原因是您的视图状态未通过验证,因为您的列表框不再包含与呈现页面时相同的选项?简单的答案是禁用页面上的事件验证:

      <%@ Page EnableEventValidation="false" %>
      

      在您的示例中,因为您在呈现页面时使用 x 个项目填充了列表框,并且您正在手动添加项目,所以 ASP.NET 启动并运行“嘿,你问过对于不存在的选项y”,并相应地引发异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        相关资源
        最近更新 更多