C# 从中继器中的下拉列表更新用户角色
我有一个repeater,它显示了用户列表和角色。也有一个下拉列表来显示角色,请参见下文C# 从中继器中的下拉列表更新用户角色,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我有一个repeater,它显示了用户列表和角色。也有一个下拉列表来显示角色,请参见下文 <td><asp:DropDownList ID="ddlChangeType" class="controlwidth100" runat="server" AutoPostBack="true" OnSelectedIndexChanged="change" /></td> change事件可以工作,但我需要的是行的ID,以便可以更新用户 一个选项是在Grid
<td><asp:DropDownList ID="ddlChangeType" class="controlwidth100" runat="server" AutoPostBack="true" OnSelectedIndexChanged="change" /></td>
change事件可以工作,但我需要的是行的ID,以便可以更新用户 一个选项是在GridView中使用其内置的编辑功能执行此操作。我通常不建议使用GridView控件,但我在这里这样做是因为从您输入的标记可以清楚地看出,您无论如何都在呈现一个表 另一种选择是作为AJAX调用,通过Javascript获取行值。无论如何,这可能比完整回发的性能要好一点。
<td>
<asp:DropDownList ID="ddlChangeType" class="controlwidth100"
runat="server" AutoPostBack="true" OnSelectedIndexChanged="change" />
<asp:HiddenField ID="RoleIdValue" runat="server"
Value='<$# Databinder.Eval(Container.DataItem, "UserId") %>' />
//Set the userId here so you can access it from code
</td>
protected void change(object sender, EventArgs e) {
DropDownList ddlChangeType = (DropDownList)sender;
HiddenField RoleIdValue =
(HiddenField)ddlChangeType.Parent.FindControl("RoleIdValue");
string? userId = RoleIdValue.Value;
string? roleId = ddlChangeType.SelectedValue;
SomeDS.Update(userId, roleId);
}
//在此处设置userId,以便可以从代码访问它
受保护的无效更改(对象发送方、事件参数e){
DropDownList ddlChangeType=(DropDownList)发送方;
HiddenField RoleIdValue=
(HiddenField)ddlChangeType.Parent.FindControl(“RoleIdValue”);
字符串?userId=RoleIdValue.Value;
字符串?roleId=ddlChangeType.SelectedValue;
更新(userId,roleId);
}
它仍然会在客户端上公开用户ID,但这应该可以帮助您:
<td><asp:DropDownList ID="ddlChangeType" class="controlwidth100" runat="server" AutoPostBack="true" OnSelectedIndexChanged="change" UserID=<%#Eval("UserID") %> /></td>
Protected Sub change(ByVal sender As Object, ByVal e As EventArgs)
Response.Write(DirectCast(sender, DropDownList).Attributes("UserID"))
End Sub