【发布时间】:2018-01-15 12:58:11
【问题描述】:
我的项目中有以下下拉列表,它从相关的 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>
【问题讨论】:
-
在尝试阅读之前,您是否在下拉列表中选择了一个项目?
-
我没有选择特定项目,因为我没有使用
。我想要的只是选择选定项目的值。它会是什么项目。 -
您是否在使用
DataBind()方法回发之前填充了DDL?检查Page_Load和SelectedIndexChanged中的相关代码,这可能会引发NRE。 -
@TetsuyaYamamoto 下拉列表与其相关的 SqlDataSource 可以正常工作,为什么需要使用 DataBind()?其次,当页面加载时,为下拉列表选择了默认项,所以我认为 DataBind() 不是必需的。
-
@TetsuyaYamamoto 你是对的。您可以将其发布为答案。
标签: c# asp.net webforms servercontrols