如何从 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