Visual Studio 2010,.NET Framework 4.0尝试将AjaxControlToolkit CascadingDropDown扩展程序手动动态添加到网页。 网页上有一个占位符。 当它回发时,控件将动态构建并添加到占位符。 我想将CascadingDropDown扩展器添加到常规ASP.NET下拉列表框中。

myCascadingDropDown = New AjaxControlToolkit.CascadingDropDown
myCascadingDropDown.ID = "cdd_" & myDisplayedField.ControlID
myCascadingDropDown.BehaviorID = "cdd_" & myDisplayedField.ControlID
myCascadingDropDown.TargetControlID = myDisplayedField.ControlID
myCascadingDropDown.Category = myDisplayedField.ControlID
myCascadingDropDown.PromptText = "Select " & aField.Caption
myCascadingDropDown.ServicePath = "CascadingDropDown.asmx"
myCascadingDropDown.ServiceMethod = "DropDownListBoxChanged"
myPanelForFields.Controls.Add(myCascadingDropDown)

错误是添加CascadingDropDown的最后一行。 错误是:

值不能为空。 参数name :未为CascadingDropDown扩展器设置目标控件。

并且,如果您查看myCascadingDropDown上的TargetControl属性,则它为null(无)。 但是您不能设置它(只读)。 我假设由于设置了TargetControlID,因此ASP.NET将从TargetControlID设置TargetControl。

有什么想法或建议吗?

更完整的例外:
用户代码未处理System.ArgumentNullException Message = Value不能为null。
参数名称:未为CascadingDropDown扩展器设置目标控件。 ParamName =未为CascadingDropDown扩展程序设置目标控件。
来源= AjaxControlToolkit
堆栈跟踪:
在AjaxControlToolkit.CascadingDropDown.CascadingDropDown_ClientStateValuesLoaded(Object sender,EventArgs e)
在AjaxControlToolkit.ExtenderControlBase.LoadClientStateValues()
在AjaxControlToolkit.ExtenderControlBase.OnLoad(EventArgs e)
在System.Web.UI.Control.LoadRecursive()
在System.Web.UI.Control.AddedControl(控件控件,Int32索引)
在System.Web.UI.ControlCollection.Add(控件子级)

VB.NET中的答案:

Yuriy Rozhovetskiy钉牢了它。 我正在vb.net中对该应用程序进行编程,因此首先我创建了一个全局变量(此类中的函数是共享/静态的):

Shared ControlToResolve As System.Web.UI.Control  

然后,我创建的代码是:

myCascadingDropDown = New AjaxControlToolkit.CascadingDropDown
myCascadingDropDown.ID = "cdd_" & myDisplayedField.ControlID
myCascadingDropDown.BehaviorID = "cdd_" & myDisplayedField.ControlID
myCascadingDropDown.TargetControlID = myDisplayedField.ControlID
myCascadingDropDown.Category = myDisplayedField.ControlID
myCascadingDropDown.PromptText = "Select " & aField.Caption
myCascadingDropDown.ServicePath = "CascadingDropDown.asmx"
myCascadingDropDown.ServiceMethod = "DropDownListBoxChanged"
ControlToResolve = myBSCComboBox
AddHandler myCascadingDropDown.ResolveControlID, AddressOf myCascadingDropDown_ResolveControlID
myPanelForFields.Controls.Add(myCascadingDropDown)  

那么处理程序是:

Shared Sub myCascadingDropDown_ResolveControlID(sender As Object, e As ResolveControlEventArgs)
    e.Control = ControlToResolve
End Sub  

我将CascadingDropDown的TargetControl定义为“ ControlToResolve”。 在将CascadingDropDown添加到保存控件的面板之前,我将ControlToResolve设置为目标下拉列表框。 当我添加CascadingDropDown时,它将调用处理程序myCascadingDropDown_ResolveControlID,该处理程序将下拉列表框分配给CascadingDropDown.Target。

我的网络服务如下:

<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<System.Web.Script.Services.ScriptService()> _
<ToolboxItem(False)> _
Public Class CascadingDropDown
    Inherits System.Web.Services.WebService

    <WebMethod(EnableSession:=True)> _
    Public Function DropDownListBoxChanged(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
    End Function  

每当我在下拉列表框中之一中需要值时,它就会使用ControlID调用此Web服务。 顺便说一句-使用ControlID,我可以知道哪个下拉列表框需要数据,如果它是父或子下拉列表框并可以获取数据。

===============>>#1 票数:0 已采纳

有两种可用的解决方案:第一种是将目标控件和扩展程序放在同一命名容器中,第二种是订阅扩展程序的ResolveControlID事件,在此事件处理程序中,将目标控件直接设置为eventArgs.Control属性。 下面的C#代码:

myCascadingDropDown.ResolveControlID += myCascadingDropDown_ResolveControlID;

void myCascadingDropDown_ResolveControlID(object sender, ResolveControlEventArgs e)
{
    e.Control = myDisplayedField;
}

  ask by Bubba translate from so

未解决问题?本站智能推荐:

1回复

禁用Ajax级联下拉菜单

我的页面上有4个Ajax Toolkit级联下拉菜单。 在某些负载条件下,我将选择的值设置为第一个2。现在,我想在这些条件下禁用前两个下拉菜单,以便它们仍然起作用,但用户无法更改选择的值。 我已经尝试在下拉框中将设置设置为false,但是级联扩展器似乎会覆盖此设置并将其设置回true。
1回复

在客户端上复制AJAX控制工具包CascadingDropDown

我想通过javascript(jQuery)在客户端复制级联下拉列表。 您可以在第一个框中看到要复制的级联下拉列表。 它们将使用AJAX控件工具包的CascadingDropDown控件在ASP.NET中呈现。 这很完美。 当您单击“添加其他类别”时,将复制第一盒的所有下拉列表
1回复

ajax控制工具包cascadingdropdown Web服务错误C#

我正在尝试将Ajax控件工具包cascadingdropdown与Web服务一起使用,但是在使用Web Service时,在初始下拉框中始终出现“ Method Error 0”。 如果我尝试在最初的下拉菜单中不使用Web服务,那么我在第二个下拉菜单中会遇到相同的错误(级联下拉菜单)。
1回复

从级联下拉列表刷新更新面板

我正在开发一个网页,该网页将利用两个层叠的下拉列表和一个包含嵌套gridview的更新面板。 我已经设法使级联下拉列表正常工作,并且我还设法使嵌套的Gridview工作。 下一步是根据第二个级联下拉列表的选择来填充gridview,这是更新面板起作用的地方。 我认为一旦对第二个下拉
2回复

级联的DropDownList不填充

我已经为此工作了好几天,没有运气。 我只是想让几个Cascading DropDownList起作用-就是这样。 但是,DropDownLists甚至不会显示“ PromptText”文本,并且绝对不会填充。 我已经从网上复制并粘贴了几个示例,但我遇到了相同的问题:空的下拉列表。 没
2回复

动态创建AJAX CascadingDropDown

我必须动态添加许多AJAX CascadingDropDown控件集(具有不同的数据)。 数据将从数据库中读取。 这种方法可以用于动态创建吗? 有一个可以动态添加的Web用户控件会更好。 我不清楚如何实现此目的。 关于最佳方法的任何建议/提示都将非常有帮助。
1回复

如何将Ajax Control Toolkit的层叠DropDownList重置为其默认提示文本(服务器端)?

如何将Ajax Control Toolkit的层叠DropDownList重置为其默认提示文本(服务器端)?
2回复

在SharePoint 2010上使用AjaxContro lToolkit中的CascadingDropDown控件时出现问题

我试图在包括项目作为Web服务的共享点可视Web部件上使用CascadingDropDown控件。 当然,它没有按我预期的那样工作。 是否有人在共享点Web部件中使用了此控件,还是知道如何使用Ajax实现级联下拉菜单?
2回复

预先填充下拉列表

我有几个CascadingDropDown列表,它们工作正常。 我不知道的是如何预先填充下拉列表,直到做出父选择为止。 这是一个例子: 假设我有两个CascadingDropDowns:1)国家2)州 用户选择国家/地区后,将使用CascadingDropDown Web服务
1回复

如何更改CascadingDropDown控件的可见性

更改.NET Ajax控件工具包CascadingDropDown控件的可见性属性的首选方法是什么? 当查询返回null值时,我想使控件“不可见”。 使用工具包扩展程序时,似乎不会从<asp:DropDownList>触发“ OnSelectedIndexChanged”事件