我有转发器,显示用户列表和角色。还有一个下拉列表,可以在那里找到角色,见下文
<td><asp:DropDownList ID="ddlChangeType" class="controlwidth100" runat="server" AutoPostBack="true" OnSelectedIndexChanged="change" /></td>
更改事件有效,但我需要的是行的ID,以便用户可以更新。
答案 0 :(得分:1)
它仍会在客户端上公开UserID,但这应该会让你:
<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
答案 1 :(得分:0)
一种选择是使用内置的编辑功能在GridView中执行此操作。我通常不建议使用GridView控件,但我这样做是因为从你输入的标记中可以清楚地知道你正在渲染一个表。
另一种选择是将其作为AJAX调用,通过Javascript获取行值。无论如何,这可能比完整的回发更好。
答案 2 :(得分:0)
<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);
}