我的项目中有以下下拉列表,它从相关的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>
答案 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选择了一个外来词