首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法设置下拉列表选定项目

无法设置下拉列表选定项目
EN

Stack Overflow用户
提问于 2018-12-19 05:55:09
回答 2查看 78关注 0票数 1

我在ASP.Net网页上有一个DropDown列表。我正在尝试在页面加载时设置它的SelectedValue`。我正在使用this page作为参考。下面是我的代码:

代码语言:javascript
复制
<asp:DropDownList runat="server" ID="ddlType" DataSourceID="sdsType" DataTextField="Name" DataValueField="AssetTypeID" />
<asp:SqlDataSource runat="server" ID="sdsType" ConnectionString='<%$ ConnectionStrings:SystemManagement %>' SelectCommand="SELECT AssetTypeID, [Name] FROM AssetType UNION SELECT 0, '' ORDER BY [Name]" SelectCommandType="Text" />

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        if (Request.QueryString["searchtype"] != null)
        {
            ddlType.SelectedValue = ddlType.Items.FindByText(Request.QueryString["searchtype"]).Value;
            ddlType.SelectedValue = "1";
        }
    }
    else
    {

    }
}

设置SelectedValue的第一行将给我一个空引用异常,如果我检查ddlType,它没有任何项。但是,如果我注释掉设置SelectedValue的第一行,并使用第二行设置它(只需对值进行硬编码),它就可以工作。到底怎么回事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-19 08:19:47

您可以使用OnDataBound事件来执行当前逻辑

代码语言:javascript
复制
/*Note the addition of "OnDataBound" */
<asp:DropDownList runat="server" 
                  ID="ddlType" 
                  DataSourceID="sdsType" 
                  DataTextField="Name" 
                  DataValueField="AssetTypeID"
                  OnDataBound="ddlType_DataBound"                 
/>
<asp:SqlDataSource runat="server" ID="sdsType" ConnectionString='<%$ ConnectionStrings:SystemManagement %>' SelectCommand="SELECT AssetTypeID, [Name] FROM AssetType UNION SELECT 0, '' ORDER BY [Name]" SelectCommandType="Text" />

protected void ddlType_DataBound(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        if (Request.QueryString["searchtype"] != null)
        {
            ddlType.SelectedValue = ddlType.Items.FindByText(Request.QueryString["searchtype"]).Value;
            ddlType.SelectedValue = "1";
        }
    }
    else
    {

    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-12-19 08:03:57

当您尝试设置ddlType的值时,DataSource尚未加载到DropDown。如果检查调试器,ddlType.Items属性将显示它当前没有项,这解释了NullReference异常。

在此之前尝试调用ddlType.DataBind(),以确保ddlType.Items具有数据库中的项。

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        ddlType.DataBind(); // Load data from DataSource
        if (Request.QueryString["searchtype"] != null)
        {
            ddlType.SelectedValue = ddlType.Items.FindByText(Request.QueryString["searchtype"]).Value;
            ddlType.SelectedValue = "1";
        }
    }
    else
    {

    }
}

确保将ddlType.DataBind()放在if(!Page.IsPostBack)条件中,以避免在每个PostBack上从数据库加载数据。

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

https://stackoverflow.com/questions/53841669

复制
相关文章

相似问题

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