我刚从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中,因此整个网站的事件验证都将被关闭!

las,这不是我的原始作品,因此这里是原始参考资料:http://johanleino.wordpress.com/2009/11/17/cascadingdropdown-casues-invalid-postback-or-callback-argument-error/

谢谢约翰!

希望这可以帮助...

09-07 01:03