首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AJAX CascadingDropDown和DropDownList SelectedValue在EditItemTemplate中的问题

AJAX CascadingDropDown和DropDownList SelectedValue在EditItemTemplate中的问题
EN

Stack Overflow用户
提问于 2010-09-30 12:53:08
回答 1查看 6K关注 0票数 2

我在EditItemTemplate of FormView有问题。

当我在InsertItemTemplate中使用这样的代码时,一切都正常:

代码语言:javascript
复制
<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由服务填充之前,会检查的值。运行调试器时,在服务方法的断点之前发生错误。

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-04 03:04:50

<rant>,我已经发现CCD非常笨重,并且充满了缺乏文档的解决方案,</rant>,但是这里是如何做一些简单的事情,比如在填充ddl时选择一个值。请注意,所选的值没有在DDL上设置,而是传递给进行选择的web服务。

代码语言:javascript
复制
<asp:ScriptManager ID="sm1" runat="server"></asp:ScriptManager>
<asp:FormView ID="fv1" runat="server" DataSourceID="yourDataSource">
    <EditItemTemplate>
        <asp:DropDownList ID="Lic_PosiadaczLicencjiIDDropDownList" runat="server" />
        <asp:CascadingDropDown ID="CascadingDropDown1" runat="server" 
            TargetControlID="Lic_PosiadaczLicencjiIDDropDownList" Category="Knt_Kod" 
            ServicePath="~/ManagerLicencjiService.asmx" ServiceMethod="GetKontrahenci"
            UseContextKey="true" ContextKey='<%# Bind("Lic_PosiadaczLicencjiID") %>'>
        </asp:CascadingDropDown>
    </EditItemTemplate>
</asp:FormView>

<asp:sqldatasource id="yourDataSource"
    selectcommand="select Lic_PosiadaczLicencjiID FROM yourdatabase"
    UpdateCommand="Update yourdatabase set Lic_PosiadaczLicencjiID = @newvalue WHERE Lic_PosiadaczLicencjiID = @Lic_PosiadaczLicencjiID"
    connectionstring="<%$ ConnectionStrings:yourConnectionString %>" 
    runat="server" 
    onupdating="yourDataSource_Updating">
    <UpdateParameters>
        <asp:Parameter Name="newvalue" DbType="String" />
    </UpdateParameters>
</asp:sqldatasource>

代码背后:

代码语言:javascript
复制
protected void yourDataSource_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
    e.Command.Parameters["@newvalue"].Value = ((DropDownList)fv1.FindControl("Lic_PosiadaczLicencjiIDDropDownList")).SelectedValue;
}

在您从其中获取数据的web服务中,您需要将上下文键添加到签名中,正如所示的一样,因为它区分大小写。然后检查所选值的返回值,并设置Selected= true。如果希望选择值而不是选定的文本,则检查x.value而不是x.name。

代码语言:javascript
复制
[WebMethod]
public CascadingDropDownNameValue[] GetKontrahenci(string knownCategoryValues, string category, string contextKey)
{
     CascadingDropDownNameValue[] results = getdata();

     CascadingDropDownNameValue selectedVal = (from x in results where x.name == contextKey select x).FirstOrDefault();
     if (selectedVal != null)
         selectedVal.isDefaultValue = true;

    return results;
}

希望这能有所帮助!

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

https://stackoverflow.com/questions/3830626

复制
相关文章

相似问题

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