我刚从AJAX Toolkit获得了一个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);
}
答案 0 :(得分:2)
颈部问题的这种痛苦的答案是自定义下拉控件!
所以关闭这个问题并希望帮助别人解决这个问题,这就是我所做的:
我使用以下代码
创建了一个名为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/
谢谢Johan!
希望这会有所帮助......