目前我有一个用于jQuery Dialog的UpdatePanel,它包含一个GridView。
GridView包含页脚中的FileUpload控件和EmptyDataTemplate
为了让FileUpload控件在javascript中工作,我知道我们需要触发器。
但是,我想指定为触发器的按钮位于GridView的模板中......
单击按钮btnAdd时,将保存FileUpload控件中的文件。
以下是代码:
<asp:UpdatePanel ID="upnlEditExpense" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAdd"/>
</Triggers>
......................
........................
.........................
<asp:GridView runat="server" ID="grdExpense" ShowHeader="True" ShowFooter="True"
AutoGenerateColumns="False">
<Columns>
...................
<asp:TemplateField>
<FooterTemplate>
<asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:UpdatePanel>
如果我将按钮ID直接放在触发器的控件ID中,则会出现错误,说无法找到btnAdd ...
我该怎么做才能让FileUpload控件工作?
答案 0 :(得分:4)
这有效
protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e)
{
LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd");
if (btnAdd != null)
{
ScriptManager.GetCurrent(this).RegisterPostBackControl(btnAdd);
}
}
答案 1 :(得分:2)
尝试从后面的代码注册回发控制,如下所示:
protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e)
{
LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd");
if (btnAdd != null)
{
ScriptManager1.RegisterAsyncPostBackControl(btnAdd);
}
}
答案 2 :(得分:2)
您可以尝试在模板内部的链接按钮周围添加更新面板,而不是向upnlEditExpense添加触发器,而不是触发...
<asp:TemplateField>
<FooterTemplate>
<asp:UpdatePanel ID="upnlBtnAdd" runat="server">
<ContentTemplate>
<asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
</FooterTemplate>
</asp:TemplateField>
答案 3 :(得分:0)
我遇到了类似的问题,这篇文章对我有所帮助,但我发现只有在updatepanels UpdateMode设置为&#34; Always&#34;时,才能在scriptmanager中注册控件。如果设置为&#34;条件&#34;这种方法不起作用。
我发现另一种方法总是有效,即在gridview的DataBound()事件中向updatepanel添加触发器:
Dim CheckBoxTrigger As UpdatePanelControlTrigger = New AsyncPostBackTrigger()
Dim SelectCheckBox As CheckBox
For i = 0 To GridViewEquipment.Rows.Count - 1 Step 1
SelectCheckBox = GridViewEquipment.Rows(i).Cells(12).FindControl("CheckBoxSign")
CheckBoxTrigger.ControlID = SelectCheckBox.UniqueID
UpdatePanelEquipment.Triggers.Add(CheckBoxTrigger)
Next