Asp.net 当ListItem不再存在时,DropDownList会引发错误
我正在使用的应用程序是服务台应用程序。我有一个表单,它使用了DropDownList,其中包含来自Active Directory的员工姓名。任何员工都可以提出请求并保存它 当一名员工离开公司,其帐户被从Active Directory中删除时,问题就会出现。当其他员工搜索数据库以查找可能对其有用的相关服务票证时,当尝试打开该票证时,将抛出一个错误,表明该名称在DropDownList项中不存在 我需要的是一个解决方案,使功能保持不变,以便能够删除Active Directory条目,但不会引发错误 我正在使用的标签表明,ASP.NET与VB。也欢迎使用C语言的解决方案 提前感谢您对我的问题提出的建议 更新: 我正在添加一些代码,以便更清晰 ASPX:这是一个巨大的问题,我只是在讨论DropDownListAsp.net 当ListItem不再存在时,DropDownList会引发错误,asp.net,vb.net,drop-down-menu,Asp.net,Vb.net,Drop Down Menu,我正在使用的应用程序是服务台应用程序。我有一个表单,它使用了DropDownList,其中包含来自Active Directory的员工姓名。任何员工都可以提出请求并保存它 当一名员工离开公司,其帐户被从Active Directory中删除时,问题就会出现。当其他员工搜索数据库以查找可能对其有用的相关服务票证时,当尝试打开该票证时,将抛出一个错误,表明该名称在DropDownList项中不存在 我需要的是一个解决方案,使功能保持不变,以便能够删除Active Directory条目,但不会引发
<asp:FormView ID="FormView1" runat="server" DataSourceID="SqlDataSource1"
DataKeyNames="ITRequestId">
<EditItemTemplate>
<br />
<asp:LinkButton ID="LinkButton5" runat="server" CausesValidation="True"
CommandName="Update" Text="Update" CssClass="InsertLink" />
<asp:LinkButton ID="LinkButton6" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel" CssClass="CancelLink" />
........
<div id="user" style="float: left;">
<label>User:<asp:RequiredFieldValidator ID="RequiredFieldValidator9" runat="server" ErrorMessage="User" Display="Dynamic" ControlToValidate="DropDownList5" Text="*" ForeColor="#FF0000"></asp:RequiredFieldValidator></label><br />
<asp:DropDownList ID="DropDownList5" runat="server" SelectedValue='<%# Bind("ITRequestUserName") %>'>
<asp:ListItem Value=""></asp:ListItem>
<asp:ListItem Value="All">All</asp:ListItem>
<asp:ListItem Value="NA">N/A</asp:ListItem>
</asp:DropDownList>
</div>
.........
</EditItemTemplate>
声明tName变量时,在代码的第11行抛出错误。发生这种情况的原因是,数据库中的用户名(由DropDownList限定)已从ActiveDirectory中删除,因此它不存在于列表的值中
以下是填充DropDownList的代码:
Protected Sub FormView1_ItemCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.ItemCreated
Dim d1 As DropDownList
Dim d2 As DropDownList
Dim myAD As New tActiveDirectory(LDAPpath)
Dim users As New ArrayList()
users = myAD.GetAllUsersInfo()
d1 = DirectCast(FormView1.Row.FindControl("DropDownList5"), DropDownList)
d2 = DirectCast(FormView1.Row.FindControl("DropDownList7"), DropDownList)
d1.DataSource = users
d2.DataSource = users
End Sub
Public Function GetAllUsersInfo() As ArrayList
Dim Users As New ArrayList()
Dim myDirectory As New DirectoryEntry(sPath)
Dim mySearcher As New DirectorySearcher(myDirectory)
Dim fullName As String
mySearcher.Filter = "(&(objectCategory=person)(objectClass=user))"
mySearcher.PropertiesToLoad.Add("sn")
mySearcher.PropertiesToLoad.Add("displayName")
mySearcher.Sort.PropertyName = "sn"
mySearcher.Sort.Direction = SortDirection.Ascending
Users.Add("")
Users.Add("N/A")
Users.Add("All")
For Each result As DirectoryServices.SearchResult In mySearcher.FindAll
fullName = result.Properties("displayName")(0).ToString
Users.Add(fullName)
Next
Return Users
End Function
在此方面的任何帮助都将不胜感激。谢谢。您的问题没有太多关于代码的细节。但听起来你的应用程序正在尝试在DDL中选择一个不再存在的值。只需在选择之前进行检查,如下所示:
Dim ddl As DropDownList
Dim item As ListItem = ddl.Items.FindByValue("Kostopoulos")
If item IsNot Nothing Then
ddl.SelectedIndex = ddl.Items.IndexOf(item)
Else
ddl.Items.Add(New ListItem("Not available"))
ddl.Enabled = False
End If
您的问题没有太多关于代码的细节。但听起来你的应用程序正在尝试在DDL中选择一个不再存在的值。只需在选择之前进行检查,如下所示:
Dim ddl As DropDownList
Dim item As ListItem = ddl.Items.FindByValue("Kostopoulos")
If item IsNot Nothing Then
ddl.SelectedIndex = ddl.Items.IndexOf(item)
Else
ddl.Items.Add(New ListItem("Not available"))
ddl.Enabled = False
End If
首先,您应该从Dropdownlist中找到listitem,如
ListItem li=DropdownID.Items.FindByValue("");
if (li != null)
DropdownID.SelectedValue = li.Value;
有关更多详细信息,请参见首先,您应该从Dropdownlist中找到listitem,如
ListItem li=DropdownID.Items.FindByValue("");
if (li != null)
DropdownID.SelectedValue = li.Value;
有关更多详细信息,请参见我添加了一些代码。你认为你能提供一些见解吗,因为我实际上不能适应你上面给出的代码。提前谢谢。我建议将移动到代码隐藏文件中,例如Page_Load或DropDownList5_Load,在选择之前可以检查该值是否在列表中。根据您的建议,我设法解决了问题。谢谢我添加了一些代码。你认为你能提供一些见解吗,因为我实际上不能适应你上面给出的代码。提前谢谢。我建议将移动到代码隐藏文件中,例如Page_Load或DropDownList5_Load,在选择之前可以检查该值是否在列表中。根据您的建议,我设法解决了问题。谢谢我添加了一些代码。你认为你能提供一些见解吗,因为我实际上不能适应你上面给出的代码。事先谢谢你。根据你的建议,我设法解决了这个问题。谢谢抱歉,添加我的评论的位置错误。我想对ElementenfresserI添加一些代码进行评论。你认为你能提供一些见解吗,因为我实际上不能适应你上面给出的代码。事先谢谢你。根据你的建议,我设法解决了这个问题。谢谢抱歉,添加我的评论的位置错误。我想评论一下Elementenfresser