当前位置:  开发笔记 > 编程语言 > 正文

应该如何正确使用RegisterForEventValidation

如何解决《应该如何正确使用RegisterForEventValidation》经验,为你挑选了1个好方法。



1> MacGyver..:

经过阅读有关脚本管理器和反复试验的广泛研究,这是我发现的.

您可以禁用事件验证,但这并不总是最佳选择,因为同时进行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("").val(key).text(val));
});

并选择我需要的值.

jQuery(this.Elements.DDLTest).val(quickDataEntryObject.TestPricingOptionId);

但是,在所有这些JavaScript事件发生之前,我正在注册下拉列表的可能值.你必须在Render事件中这样做.

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


@ user2220060感谢您的澄清.我看了这个已经有一年多了.只是为了帮助其他读者,你能列出一些你可以称之为的其他方法吗?我记得ASP.NET有一系列事件在整页回发期间触发,但我不记得它们是什么.
推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有