Не удается установить выпадающий список выбранного элемента - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть список DropDown на веб-странице ASP.Net.Я пытаюсь установить его SelectedValue` при загрузке страницы.Я использую эту страницу в качестве ссылки.Вот мой код:

<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, и установлю ее, используя вторую строку (просто жестко закодировав значение), это сработает.Что происходит?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы можете использовать событие OnDataBound для выполнения текущей логики

/*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
    {

    }
}
0 голосов
/ 19 декабря 2018

Когда вы пытаетесь установить значение для ddlType, DataSource еще не загружен в DropDown.Если вы проверите отладчик, свойство ddlType.Items покажет, что в настоящее время у него нет элементов, что объясняет исключение NullReference.

Попробуйте позвонить ddlType.DataBind() прежде, чтобы убедиться, что ddlType.Items имеет элементы из базы данных.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...