我正在为朋友制作一个电子商务网站,我希望尽可能地扩展它。我假设他们的社区将在某种程度上成长为压倒性的数字,他们最终将需要指定新的管理员。我不希望他们来找我配置WSAT。 我已经放入了两个下拉列表和一个按钮。 一个用户拉取用户并将用户名与他们所在的角色连接起来。第二个用户名拉取所有角色。 该按钮可将所选用户从其所在位置移除,并将其置于下拉列表中选定的角色中。
<asp:DropDownList ID="ddlUsers" runat="server" AppendDataBoundItems="True"
DataSourceID="dsMembers" DataTextField="Info" DataValueField="Username">
<asp:ListItem>--Select a User --</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddlRoles" runat="server" AppendDataBoundItems="True"
DataSourceID="dsRoles" DataTextField="RoleName" DataValueField="RoleId"
style="margin-bottom: 0px">
<asp:ListItem>--Select Privilege--</asp:ListItem>
</asp:DropDownList>
<asp:LinkButton ID="lbtnChangeRole" runat="server"
onclick="lbtnChangeRole_Click">Change Role</asp:LinkButton>
但是,每次单击按钮时,无论我选择哪一个,它都会自动选择列表中的第一个用户。
这是背后的代码。
protected void lbtnChangeRole_Click(object sender, EventArgs e)
{
string user = ddlUsers.SelectedValue.ToString();
string role = ddlRoles.SelectedItem.ToString();
string currentRole = Roles.GetRolesForUser(user)[0];
//check to see if the user is already in role
if (!Roles.IsUserInRole(user, role))
{
Roles.AddUserToRole(user, role);
Roles.RemoveUserFromRole(user, currentRole);
}
}
答案 0 :(得分:5)
您是否在Page_Load中填充了列表?此症状的常见原因是列表正在回发后重新填充,因此默认为第一个项目。通常通过将列表填充代码包装在对帖子的检查中来避免这种情况:
if (!IsPostBack)
{
// populate the drop down lists, and anything else for loading the page.
}
请注意,发布回发时,在调用click事件处理程序之前调用Page_Load。