在回发之前在ViewState中保存数据的事件

时间:2010-10-14 16:10:53

标签: c# asp.net

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

我尝试了OnSelectedIndexChanged事件,但是它被解雇了太晚了。

可以这样做,以及如何完成?

4 个答案:

答案 0 :(得分:2)

使用ViewState无法完成此操作。 ViewState由服务器设置。客户端无法在JavaScript中修改它。

使用JavaScript或jQuery建议其中一个选项:

  • 修改隐藏的输入
  • 修改Cookie值

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

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

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

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

      });
});

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

您的DropDownList将按正常情况回发。

答案 1 :(得分:1)

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

  • PreInit
  • 初始化
  • InitComplete
  • 预压

请查看ASP.NET Page Lice Cycle了解详情。

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

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

答案 2 :(得分:0)

您是否尝试过OnChange活动?看看this post
更新:使用隐藏字段将自定义数据传递到服务器端。你无法修改viewstate 此外,Scott Mitchell提出了there is a nice post关于此事的内容。

答案 3 :(得分:0)

我知道你已经标记了这个问题的答案,但我认为你问的是你的视图状态验证失败,因为你的列表框不再包含它在呈现页面时所做的相同选项吗?简单的答案是禁用页面上的事件验证:

<%@ Page EnableEventValidation="false" %>

在您的示例中,因为您在呈现页面时使用 x 填充列表框中的许多项目,并且您手动添加项目,所以ASP.NET会启动并执行“嘿,您已经问过了对于不存在的选项 y ,并相应地抛出异常。