如何从 asp.net 中的下拉列表中获取 DataTextField 及其 DataValueField 的非英语值
how to get the non english value of a DataTextField and its DataValueField from a dropdownlist in 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>
后一种说法,真的只能是testLabel为null或者ddlProvince为null。我没有在您发布的页面代码中看到 testLabel 定义;你确定它有一个实例吗?如果您在这些代码行上暂停调试器,您将能够看到哪个变量声称为空。不会是因为ddlProvince选了外来词
ddlProvince.SelectedItem
& ddlProvince.SelectedValue
有 null 值,而下拉列表选项在 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
}
}
注意:ddlGraduationClass
也可以像上面的示例一样绑定到另一个 SqlDataSource
。
参考文献:
Why is my DropDownList's SelectedItem not working?
C# dropdown selected item null when list of strings/objects bound to the Data source
我的项目中有以下下拉列表,它从相关的 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>
后一种说法,真的只能是testLabel为null或者ddlProvince为null。我没有在您发布的页面代码中看到 testLabel 定义;你确定它有一个实例吗?如果您在这些代码行上暂停调试器,您将能够看到哪个变量声称为空。不会是因为ddlProvince选了外来词
ddlProvince.SelectedItem
& ddlProvince.SelectedValue
有 null 值,而下拉列表选项在 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
}
}
注意:ddlGraduationClass
也可以像上面的示例一样绑定到另一个 SqlDataSource
。
参考文献:
Why is my DropDownList's SelectedItem not working?
C# dropdown selected item null when list of strings/objects bound to the Data source