EditItemTemplate 中 AJAX CascadingDropDown 和 DropDownList SelectedValue 的问题
我在 FormView 的 EditItemTemplate 中遇到问题。
当我在 InsertItemTemplate 中使用此类代码时,一切正常:
<asp:DropDownList ID="Lic_PosiadaczLicencjiIDDropDownList" runat="server"
SelectedValue='<%# Bind("Lic_PosiadaczLicencjiID") %>' />
<asp:CascadingDropDown ID="CascadingDropDown1" runat="server"
TargetControlID="Lic_PosiadaczLicencjiIDDropDownList" Category="Knt_Kod"
ServicePath="~/ManagerLicencjiService.asmx" ServiceMethod="GetKontrahenci">
</asp:CascadingDropDown>
但是当我在 EditItemTemplate 中使用完全相同的代码时,我收到一条错误,指出 SelectedValue 是错误的,因为它不存在于元素列表中。 我认为问题在于 DropDownList 在由服务填充之前会检查其值。当我运行调试器时,错误发生在服务方法中的断点之前。
如何解决这个问题呢?
I am having problem in EditItemTemplate of FormView.
When I use such code in InsertItemTemplate everything works:
<asp:DropDownList ID="Lic_PosiadaczLicencjiIDDropDownList" runat="server"
SelectedValue='<%# Bind("Lic_PosiadaczLicencjiID") %>' />
<asp:CascadingDropDown ID="CascadingDropDown1" runat="server"
TargetControlID="Lic_PosiadaczLicencjiIDDropDownList" Category="Knt_Kod"
ServicePath="~/ManagerLicencjiService.asmx" ServiceMethod="GetKontrahenci">
</asp:CascadingDropDown>
But when I use exactly the same code in EditItemTemplate I am getting an error that SelectedValue is wrong cause it doesn't exists on the list of elements.
I think that the problem is that DropDownList is checked for the values before it is populated by the service. When I run debugger the error occured before breakpoint in the service method.
How to solve this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我发现 CCD 非常笨重,并且充满了缺乏记录的解决方法,但这里是您如何做一些简单的事情,例如选择一个填充ddl时的值。请注意,所选值未在 DDL 上设置,而是被传递到完成选择的 Web 服务。
代码隐藏:
在您从中获取数据的 Web 服务中,您需要将上下文密钥添加到签名完全如图所示,因为它区分大小写。然后,您检查返回值中是否有所选值并设置 selected = true。如果您想要选定的值而不是选定的文本,请检查 x.value 而不是 x.name。
希望这有帮助!
<rant>
I've found the CCD very clunky and full of poorly-documented workarounds</rant>
but here is how you do something as simple as selecting a value when filling the ddl. Note that the selected value is not set on the DDL and that it is being passed to the web service where the selecting is done.code behind:
and in your web service where you are getting your data from you need to add the context key to the signature exactly as shown as it is case sensitive. You then check your returned values for the selected value and set selected = true. If you want selected value instead of selected text then check for x.value instead of x.name.
Hope this helps!