AjaxControlToolkit组合框所选值手动重置在asp.net c#中不起作用



我正在使用AjaxControlToolkit组合框。在页面加载时,我已将所选值设置为组合框。页面加载成功后,我已经清除了组合框,手动选择了组合框文本框中的值。所选值不会更改为空或null。

现在组合框的文本框是空的,但它保留了旧的选定值。

当用户将选定值更改为空时,如何将选定值设置为空?

<ajaxToolkit:ComboBox    ID="cmbTest" AppendDataBoundItems="false"  ClientIDMode="Static"  AutoPostBack="false"   MaxLength="64" Width="600px" runat="server" AutoCompleteMode="SuggestAppend">
</ajaxToolkit:ComboBox>

你永远不会得到一个"空";价值

然而,ajax组合的工作方式确实有所不同,而且它在很大程度上有一个缺陷,即

常规下拉列表总是默认为列表中的第一个选项。

ajax下拉列表不是以第一个值开始的,所选索引以-1开始。

("文本"one_answers"选定值"得到空字符串)。

事实上,很少有人注意到问题/问题,那么他们总是必须在标准组合框中添加一个空行选项(否则,如前所述,它默认选择第一行)。既然那意味着用户永远不能选择空白值?

然后我们总是添加空白选项。

既然我们总是必须这样做,那么当我们说跳到使用ajax的时候?

好吧,我们习惯了默认的空白选择设置。

然而,ajax组合有一些不同的行为。

它以一个空白选择开始(默认情况下)-即使你没有设置一个。因此,所选索引将为-1。

但是,如果用户选择了一个值,然后说稍后决定清空他们的选择?组合框忽略这一点,你会看到(有一个帖子)组合框恢复到以前的选择。

如何修复?

只需做我们必须做的常规下拉菜单-PROIVDE空白行选择。我真的不能说这是一个bug,但它是"一些什么";一个问题。(事实上,我甚至会说这是行为中的一个错误,去掉组合框应该恢复到selectedIndex=-1,但事实并非如此

然而,要解决这个问题,只需像我们对常规下拉框所做的那样简单——为组合框提供一个空白选择。

这确实意味着在页面启动时,组合框将显示-1(无选择)。现在,如果他们选择-ok,一切都正常。然而,如果它们擦除/空白,那么你将得到";0";对于索引,不能通过擦除内容将其恢复为无值。(你可以在代码中设置-1,但我不担心)。

因此,典型的加载代码如下所示:

(我没有ajaxtoolkit的c#设置,但无论如何,我建议这样做:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadData
End If
End Sub
Sub LoadData()
Using con As New SqlConnection(My.Settings.TEST4)
Using cmdSQL As New SqlCommand("SELECT ID, City from City ORDER BY City", con)
con.Open()
Dim rstData As New DataTable
rstData.Load(cmdSQL.ExecuteReader)
DropDownList1.DataSource = rstData
DropDownList1.DataBind()
DropDownList1.Items.Insert(0, New ListItem("", ""))
ComboBox1.DataSource = rstData
ComboBox1.DataBind()
ComboBox1.Items.Insert(0, New ListItem("", ""))

End Using
End Using
End Sub

所以,在上面,我只是加载了一个常规的asp.net下拉列表,然后加载了ajax下拉列表。

请注意,在这两种情况下,我都会在此处添加一个空白选择。

那么,现在,如果用户确实将所选内容擦除为空白?然后它将为您选择第0行。

如果您不在驱动ajax组合的数据中提供空白行?

然后是的,您将体验到擦除组合框被认为不是对当前所选值的更改。您在代码中注意到,旧的索引值仍然存在,事实上,在返回后,您会看到ajax组合恢复到以前(当前)选择的值。

那么,底线是什么?

将空行值/选择添加到列表中。我们几乎总是要用一个常规的下拉列表来做这件事,所以当我们跳到ajax组合时,我们总是做同样的事情(这解释了为什么很少有人看到你的错误/问题)。

因此,如果您没有为ajax组合提供一个空白行选项,那么实际上您就不能将该选项留空。而";真的很糟糕";部分原因是,即使你删除了选择(空格键或高亮+剪切),它也会变为空白,但组合框会认为空白没有变化。

我不知道是否有属性或设置可以解决上述问题,但如前所述,解决方案是在驱动组合框的数据中始终提供一个空白选项。

你很幸运,大多数人也是,因为在99%的情况下,我们想要一个空白的允许值。事实上,只有当你不想空白选择时,纸牌屋才会崩溃!(您无法阻止用户擦除/清空组合框,但该操作实际上不会清空或将组合框重新设置为选定的索引-1(应该是))。

如果你填写了这个组合框(它的工作原理与常规下拉菜单非常相似),那么你必须提供一个空白/空的选择。换句话说,组合框默认为列表中的第一个项目。一般来说,你不能删除/清空组合框。

因此,要修复/管理此问题,请根据示例代码在位置0处插入一个空行值。我们总是不得不用一个常规的下拉列表来做这件事,所以对于ajax组合来说这不是什么大不了的事,但如果你不将空白选项添加到ajax组合中,那肯定是大不了的,因为用户可以擦除值-而组合框实际上不会更改其选择,除非你将空白行作为驱动组合框的数据的一部分。

编辑:

但是,如果您希望取消选择ajax组合框-并且在不添加额外空白行的情况下取消EVEN?

你可以这样做:

ComboBox1.SelectedIndex = -1;

最新更新