我正在寻找在DropdownList自动回发之前触发的事件,以便在ViewState中保存Listbox项目(用JS填充)。
我尝试了OnSelectedIndexChanged
事件,但是它被解雇了太晚了。
可以这样做,以及如何完成?
答案 0 :(得分:2)
使用ViewState无法完成此操作。 ViewState由服务器设置。客户端无法在JavaScript中修改它。
使用JavaScript或jQuery建议其中一个选项:
然后,您可以在页面回发后检测到这些更改。
设置下拉菜单以修改隐藏元素。
$(document).ready(function() {
$('#<%=DropDownList1.ClientID %>').change(function() {
$("#myHiddenInput").val("changed!");
});
});
....
<input type="hidden" id="myHiddenInput" />
您的DropDownList将按正常情况回发。
答案 1 :(得分:1)
在页面加载之前发生以下所有事件:
请查看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 ,并相应地抛出异常。