gpt4 book ai didi

c# - ASP.Net CascadingDropDown 和 EnableEventValidation ="false"

转载 作者:行者123 更新时间:2023-11-30 17:14:08 26 4
gpt4 key购买 nike

我刚刚从 AJAX 工具包中获得了一个 CascadingDropDown,它与 SelectedIndexChanged 一起使用以重定向到一个传递选定值的查询字符串的页面。我很开心!

但是,我只是通过向页面添加 EnableEventValidation="false"来使 SelectedIndexChanged 事件起作用。问题是 CascadingDropDown 将作为产品选择器放置在我网站的 MasterPage 中。

我不喜欢将 EnableEventValidation="false"添加到我的 MasterPage!我查看了 MSDN 上的 ClientScriptManager.RegisterForEventValidation 方法,它就在我的脑海中。

最好的事情是什么?是否有使用 ClientScriptManager.RegisterForEventValidation 的简单示例?

干杯...

编辑:这是代码:

<asp:ScriptManager ID="asm" runat="server" />
<div>
Series: <asp:DropDownList ID="SeriesList" runat="server" /><br />
Printers: <asp:DropDownList ID="PrinterList" runat="server"
onselectedindexchanged="PrinterList_SelectedIndexChanged"
AutoPostBack="True" /><br />
</div>

<asp:CascadingDropDown ID="ccd1" runat="server"
ServicePath="CascadingDropdown1.cs.asmx" ServiceMethod="GetSeries"
TargetControlID="SeriesList" Category="Series"
PromptText="Select Series" />
<asp:CascadingDropDown ID="ccd2" runat="server"
ServicePath="CascadingDropdown1.cs.asmx" ServiceMethod="GetPrintersForSeries"
TargetControlID="PrinterList" ParentControlID="SeriesList" Category="Printer"
PromptText="Select Printer" />

<asp:UpdatePanel ID="UpdatePanel1" runat="server">

<Triggers>
<asp:AsyncPostBackTrigger ControlID="PrinterList" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>

这是事件:

protected void PrinterList_SelectedIndexChanged(object sender, EventArgs e)
{
int printerID = Convert.ToInt32(PrinterList.SelectedValue);
System.Web.HttpContext.Current.Response.Redirect("Default.aspx?PID="+printerID);
}

最佳答案

解决这个棘手问题的方法是自定义下拉控件!

因此,为了结束这个问题并希望能帮助其他人解决这个问题,我就是这样做的:

我使用以下代码创建了一个名为 NoValidationDropDownList.cs 的 cs 文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;

namespace My.Namespace.Controls
{
public class DdlNoEventValidation : DropDownList
{
}
}

然后在下拉控件所在的 aspx 页面上(在我的例子中是 MasterPage)我放置了这个:

<%@ Register TagPrefix="asp" Namespace="My.Namespace.Controls" %>

接下来我像这样修改级联下拉框:

<p><asp:DdlNoEventValidation ID="DD1" runat="server" /></p>
<p><asp:DdlNoEventValidation ID="DD2" runat="server"
onselectedindexchanged="My_SelectedIndexChanged"
AutoPostBack="True"
/></p>

据我了解,创建自定义下拉控件会绕过事件验证。这样您就不需要关闭整个页面的事件验证。在我的例子中,由于控件位于 MasterPage 中,整个站点的事件验证将被关闭!

唉,这不是我的原创作品,所以这里是原始引用:http://johanleino.wordpress.com/2009/11/17/cascadingdropdown-casues-invalid-postback-or-callback-argument-error/

谢谢约翰!

希望这有助于...

关于c# - ASP.Net CascadingDropDown 和 EnableEventValidation ="false",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9088146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com