嗨,我有一个DropDownList。
我需要在其中可视化一个SINGLE值(ListItem)当前登录用户,如
<asp:ListItem>Joe</asp:ListItem>
这是我的错误代码,如果UserName是“Joe”,DropDownList会为ListItem的每个字母显示: 例如:
<asp:ListItem>J</asp:ListItem>
<asp:ListItem>o</asp:ListItem>
<asp:ListItem>e</asp:ListItem>
这是我的代码:
<asp:DropDownList ID="uxUserListSelector" runat="server"></asp:DropDownList>
MembershipUser myCurrentUser = Membership.GetUser();
myUserList.DataSource = myCurrentUser.UserName;
myUserList.DataBind();
知道怎么解决吗?感谢
答案 0 :(得分:7)
您正在将DataSource
设置为字符串(myCurrentUser.UserName
),因此它会将其解释为字符数组并相应地绑定它。
至于如何修复它,你究竟想做什么?为什么使用DropDownList
来显示单个项目?为什么不是TextBox
或Label
?
目前,我假设您希望DropDownList
包含所有用户,并预先选择当前用户。它是否正确?如果是这样,那么您将需要一种方法来获取所有用户的名称并将DropDownList
绑定到该名称列表。 (可能会有一个简单的IList<string>
用户名,但如果您希望更好地控制DataTextItem
和DataValueItem
,那么自定义对象的IList<>
可能会更好。)
一旦绑定到用户名的列表,就可以将所选值设置为当前用户名。
修改:根据您的回复,整体代码如下所示:
// You'll need a method to get all of the users, this one is just for illustration
myUserList.DataSource = userRepository.GetAllUsers();
// Set this to the property on the user object which contains the username, to display in the dropdownlist
myUserList.DataTextField = "Username";
// Set this to the property on the user object which contains the user's unique ID, to be the value of the dropdownlist (this might also be the username)
myUserList.DataValueField = "UserID";
myUserList.DataBind();
// There are a number of different ways to pre-select a value, this is one
myUserList.Items.FindByText(myCurrentUser.UserName).Selected = true;
当然,您希望将其中的一部分包含在正确的错误处理中。例如,如果在列表中找不到提供的用户名,则最后一行将抛出异常。