我在GridView
内有一个UpdatePanel
控件和一个简单的TextBox
。
将文本输入TextBox
(并单击一个按钮)后,将从数据库中检索结果列表并绑定到GridView
。
grd.DataSource = DataManager.GetFilteredList(txt.Text);
grd.DataBind();
返回的每一行都有一个LinkButton
TemplateField
列,其中包含CommandArgument
和CommandName
个参数。
我希望在单击该按钮时运行一些代码,但因为即使在部分回发时也会重新创建整个Page
,GridView
会丢失其数据。通常我会在查询字符串中传递必要的参数,但因为这是{i} UpdatePanel
我不能这样做。
对此有什么好的和干净的方法?我想到的只是,而不是使用RowCommand
来创建带有简单HTML GridView
元素的<a>
按钮,在其HRef
中传递查询字符串参数}参数,然后触发一个完整的回发,最后在Page_Load
事件中进行操作,但这看起来很笨拙。
这是请求的ASP标记:
<asp:UpdatePanel ID="upd" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="input-group">
<asp:TextBox ID="txt" runat="server" CssClass="form-control"></asp:TextBox>
<div class="input-group-btn">
<asp:LinkButton ID="btn" CssClass="btn btn-default" runat="server" OnClick="btn_Click">Search</asp:LinkButton>
</div>
</div>
<hr />
<asp:GridView ID="grd" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" ItemType="xxx.Policy" AllowPaging="True" PageSize="10" OnRowCommand="grd_RowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btn" CommandName="Connect" CommandArgument='<%#: Item.Id %>' runat="server">Connect</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="grd" EventName="RowCommand" />
</Triggers>
</asp:UpdatePanel>
感谢。
答案 0 :(得分:0)
使用RowCommand
事件
protected void grd_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Connect")
{
//Add your code to connect using Item.Id
//get Item.Id value using e.CommandArgument.ToString()
}
}