【问题标题】:how to get the non english value of a DataTextField and its DataValueField from a dropdownlist in asp.net如何从 asp.net 的下拉列表中获取 DataTextField 及其 DataValueField 的非英语值
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • testLabel 已定义 我通过从另一个不包含非英语数据的下拉列表中获取数据来测试此标签,并且一切正常。
  • 当我想获取非英语项目时出现异常。
  • 你能举一个失败的例子吗?这听起来更像是一个应该报告给微软的错误,如果你可以在 ListItem 中放入一个值,如果你在选择该值时调用 .SelectedValue 会导致其托管控件崩溃
  • 当我将此下拉列表的数据放入 testLabel 时,一切正常。
【解决方案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
    }
}

注意: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多