C# 从中继器中的下拉列表更新用户角色

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

我有一个repeater,它显示了用户列表和角色。也有一个下拉列表来显示角色,请参见下文

<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