经过阅读有关脚本管理器和反复试验的大量研究之后,发现了以下内容。
您可以禁用事件验证,但这并不总是最好的选择,因为同时进行Javascript验证和ASP.NET验证是一种很好的做法。这就是在下拉菜单中注册这些值的全部目的。如果您有将选项注入选项的Javascript(来自ASP.NET
DropDownList控件的选择渲染),则希望尽可能防止脚本注入。
回答我的问题:为此,我们针对可能出现在应用程序中任何情况的下拉菜单中的每个可能值,调用RegisterForEventValidation。
就我而言,我有两个下拉菜单。一个下拉菜单用于引起回发,并使用基于第一个下拉菜单的值重新填充第二个下拉菜单。但是,现在我正在使用Javascript使用jQuery将值注入到下拉列表中。
在重新填充值之前,我使用jQuery删除了所有值。
jQuery("#<%=DDLTest.ClientID %>").children("option").each(function() { jQuery(this).remove();});当我的第一个下拉列表发生更改时,我用与第一个下拉列表值相关的值重新填充第二个下拉列表。
var map = { "1112": "Hair 5 Drug Panel", "1121": "Hair 5 Drug Panel and Extended Opiates Limit of Detection Test", "1120": "Hair 5 Drug Panel Limit of Detection Test" };var thisTemp = this; // the reason I do this is because "this" is already being used in the callback.jQuery.each(map, function(key, val) { jQuery(thisTemp.Elements.DDLTest).append(jQuery("<option></option>").val(key).text(val));});并选择我需要的值。
jQuery(this.Elements.DDLTest).val(quickDataEntryObject.TestPricingOptionId);
但是,在所有这些Javascript事情发生之前,我正在为下拉列表注册可能的值。 您必须在“渲染”事件中执行此操作。
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) Dim testPricingOptionTable As DataTable = ApplicationContext.Database.ExecuteDataSet("procEventValidationRegisteredValues", "test_pricing_options").Tables(0) For Each testPricingOptionRow As DataRow In testPricingOptionTable.Rows Page.Clientscript.RegisterForEventValidation(DDLTest.UniqueID, testPricingOptionRow(0).ToString) Next Mybase.Render(writer) End Sub


