首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.Net CascadingDropDown和EnableEventValidation="false“

ASP.Net CascadingDropDown和EnableEventValidation="false“
EN

Stack Overflow用户
提问于 2012-02-01 06:43:23
回答 1查看 4.6K关注 0票数 3

我刚刚从AJAX Toolkit获得了一个与SelectedIndexChanged一起工作的CascadingDropDown,用于重定向到一个页面,该页面传递了一个选定值的查询字符串。我很高兴!

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

我并不热衷于在我的MasterPage中添加EnableEventValidation="false“!我看过MSDN上的ClientScriptManager.RegisterForEventValidation方法,我完全搞不懂。

最好的办法是什么?有没有使用ClientScriptManager.RegisterForEventValidation?的简单示例

干杯..。

编辑:代码如下:

代码语言:javascript
复制
<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>

事件是这样的:

代码语言:javascript
复制
protected void PrinterList_SelectedIndexChanged(object sender, EventArgs e)
        {
            int printerID = Convert.ToInt32(PrinterList.SelectedValue);
            System.Web.HttpContext.Current.Response.Redirect("Default.aspx?PID="+printerID);
        }
EN

回答 1

Stack Overflow用户

发布于 2012-02-21 20:34:56

解决这个令人头疼的问题的答案是自定义下拉控件!

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

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

代码语言:javascript
复制
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),我放置了以下内容:

代码语言:javascript
复制
<%@ Register TagPrefix="asp" Namespace="My.Namespace.Controls" %>

接下来,我修改了层叠下拉框,如下所示:

代码语言:javascript
复制
<p><asp:DdlNoEventValidation ID="DD1" runat="server" /></p>
<p><asp:DdlNoEventValidation ID="DD2" runat="server" 
   onselectedindexchanged="My_SelectedIndexChanged"
   AutoPostBack="True"
   /></p>

据我所知,创建自定义dropdown控件可以规避事件验证。这样,您就不需要关闭整个页面的事件验证。在我的例子中,由于控件位于MasterPage中,整个站点的事件验证将被关闭!

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

谢谢约翰!

希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9088146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档