Как получить неанглийское значение 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
таким же образом, как образец выше.
Рекомендации:
В последнем утверждении действительно может быть только то, что testLabel равен нулю или ddlProvince равен нулю. Я не вижу testLabel, определенный в коде страницы, который вы разместили; Вы уверены, что у него есть экземпляр? Если вы приостановите отладчик в этих строках кода, вы сможете увидеть, какая переменная объявлена пустой. Это не будет, потому что ddlProvince выбрал иностранное слово