如何从asp.net的下拉列表中获取DataTextField及其DataValueField的非英语值

时间:2017-08-08 05:42:04

标签: c# asp.net webforms servercontrols

我的项目中有以下下拉列表,它从相关的SqlDataSource获取数据。我面临的问题是下拉列表包含非英语项(省名),我既不能得到文件中代码项的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 个答案:

答案 0 :(得分:1)

ddlProvince.SelectedItem&amp; ddlProvince.SelectedValue具有null值,而dropdownlist选项在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

答案 1 :(得分:0)

在后一种语句中,它实际上只能是testLabel为null或ddlProvince为null。我没有看到您发布的页码中定义的testLabel;你确定它有一个实例吗?如果您在这些代码行上暂停调试器,您将能够看到声称哪个变量为null。它不会是因为ddlProvince选择了一个外来词