Как получить неанглийское значение DataTextField и его DataValueField из выпадающего списка в asp.net

У меня есть следующий выпадающий список в моем проекте, который берет свои данные из соответствующего SqlDataSource. Проблема, с которой я сталкиваюсь, состоит в том, что раскрывающийся список содержит неанглийские элементы (ProvinceName), и я не могу получить ни значение DataTextField, ни значение DataValueField элемента в коде файла.

вот разметка:

<div class="col-lg-6">
    <label for="ddlProvince" class="control-label">Province</label>
    <asp:DropDownList AutoPostBack="true" ID="ddlProvince" 
         DataSourceID="sqlDsProvince" DataTextField="ProvinceName" 
         DataValueField="ProvinceID" CssClass="dropdown form-control" runat="server" />
    <asp:SqlDataSource ID="sqlDsProvince" runat="server" ConnectionString="<%$ connectionStrings:connectionStr %>" SelectCommand="SELECT [ProvinceID], [ProvinceName] FROM [Provinces]" ProviderName="System.Data.SqlClient">
    </asp:SqlDataSource>
</div>

Когда я запускаю следующие заявления

testLabel.Text = ddlProvince.SelectedItem.Text;

или же

testLabel.Text=ddlProvince.SelectedValue;

Я получаю исключение NullReferenceException

ОБНОВЛЕНИЕ У меня есть еще один выпадающий список, который не включает неанглийский элемент, когда я получаю элементы этого выпадающего списка в testLabel, все работает

<asp:DropDownList ID="ddlGraduationClass" CssClass="dropdown form-control" runat="server">
                                <asp:ListItem Text="12" Value="12"></asp:ListItem>
                                <asp:ListItem Text="14" Value="14"></asp:ListItem>
                            </asp:DropDownList>

2 ответа

Решение

ddlProvince.SelectedItem & ddlProvince.SelectedValue имеет нулевое значение, в то время как параметры раскрывающегося списка не имеют элементов параметров во время Page_Load произошло событие или повторное связывание данных во время обратной передачи (учитывая AutoPostBack="true", так что это может вызвать обратную передачу). Чтобы заново привязать данные, используйте IsPostBack проверить соответствующее событие:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ddlProvince.DataSource = sqlDsProvince;
        ddlProvince.DataTextField = "ProvinceName";
        ddlProvince.DataValueField = "ProvinceID";
        ddlProvince.DataBind(); // don't forget to add this for binding dropdownlist items
    }
}

NB: ddlGraduationClass может также направиться к другому SqlDataSource таким же образом, как образец выше.

Рекомендации:

Почему SelectedItem моего DropDownList не работает?

C# ниспадающий список выбранного элемента null, когда список строк / объектов, связанных с источником данных

В последнем утверждении действительно может быть только то, что testLabel равен нулю или ddlProvince равен нулю. Я не вижу testLabel, определенный в коде страницы, который вы разместили; Вы уверены, что у него есть экземпляр? Если вы приостановите отладчик в этих строках кода, вы сможете увидеть, какая переменная объявлена ​​пустой. Это не будет, потому что ddlProvince выбрал иностранное слово

Другие вопросы по тегам