我有一个DropDownList。
我需要使用List<ListItem>
中收集的项目填充它。
在我的脚本中,收集器已正确填充。
但我无法填充DropDownList。我收到一个错误:
DataBinding: 'System.Web.UI.WebControls.ListItem' does not contain a property with the name 'UserName'."}
<asp:DropDownList ID="uxListUsers" runat="server" DataTextField="UserName"
DataValueField="UserId">
List<ListItem> myListUsersInRoles = new List<ListItem>();
foreach (aspnet_Users myUser in context.aspnet_Users)
{
// Use of navigation Property EntitySet
if (myUser.aspnet_Roles.Any(r => r.RoleName == "CMS-AUTHOR" || r.RoleName == "CMS-EDITOR"))
myListUsersInRoles.Add(new ListItem(myUser.UserName.ToString(), myUser.UserId.ToString()));
}
uxListUsers.DataSource = myListUsersInRoles; // MAYBE PROBLEM HERE????
uxListUsers.DataBind();
有什么想法吗?感谢
答案 0 :(得分:4)
初始化listItem对象时,实际上是初始化属性(文本,值)
EX ( new ListItem(myUser.User (Text PROPERTY), myUser.UserId.ToString() (Value PROPERTY) )
尝试将其与
绑定 <asp:DropDownList ID="uxListUsers" runat="server" DataTextField="Text"
DataValueField="Value">
下拉列表将采用存储在ListItem
对象
并在用户界面中显示
答案 1 :(得分:3)
看起来您正在绑定ListItem对象列表,这些对象不公开UserName或UserId属性。只需清除这些属性(DataTextField和DataValueField),你就应该好好去。
或者更好的是,只需将您创建的列表项直接添加到下拉菜单中,然后跳过绑定。
答案 2 :(得分:3)
如错误所示,System.Web.UI.WebControls.ListItem没有UserName成员。它确实有Text和Value成员。请尝试以下
<asp:DropDownList ID="uxListUsers" runat="server" DataTextField="Text" DataValueField="Value">
答案 3 :(得分:2)
如此简单,只需使用ListItemCollection代替通用列表列表 这是
更改第一行
<asp:DropDownList ID="uxListUsers" runat="server">
ListItemCollection myListUsersInRoles = new ListItemCollection();
foreach (aspnet_Users myUser in context.aspnet_Users)
{
// Use of navigation Property EntitySet
if (myUser.aspnet_Roles.Any(r => r.RoleName == "CMS-AUTHOR" || r.RoleName == "CMS-EDITOR"))
myListUsersInRoles.Add(new ListItem(myUser.UserName.ToString(), myUser.UserId.ToString()));
}
uxListUsers.DataSource = myListUsersInRoles; // MAYBE PROBLEM HERE????
uxListUsers.DataBind();
答案 4 :(得分:1)
不要将ListItems
绑定到列表,只需添加它们即可。绑定是一种使用ListControl
的内置函数将对象转换为ListItems
的方法。由于您已完成转换,因此请保存自己和服务器,并使用Clear
和Items.AddRange
代替DataSource
和DataBind
:
uxListUsers.Clear();
uxListUsers.Items.AddRange(myListUsersInRoles;)
您还需要从aspx中删除绑定指令:
<asp:DropDownList ID="uxListUsers" runat="server" />
答案 5 :(得分:0)
通用列表中没有Username和UserId。您最好的选择是,如果命名很重要,则创建一个对象,其中包含您需要绑定的两个字段,而不是绑定到ListItem。如果必须绑定到ListItem,请将Value和Text视为绑定点。
答案 6 :(得分:0)
可能是使用反射的最简单方法
uxListUsers.DataSource = typeof(ListItem).GetProperties();
uxListUsers.DataTextField = "Name"; //This is name of property enumerable typeof(ListItem).GetProperties().AsEnumerable().Select(p => new { p.Name })
uxListUsers.DataBind();
答案 7 :(得分:0)
ListItem LI = new ListItem();
LI.Value = Convert.ToString("value");
LI.Text = Convert.ToString("text");
DrpDwnlist.Items.Add(LI);