我有一个radgrid,每行都有一个向用户发送文件的按钮。网格位于更新面板中,保持这种状态至关重要。有没有办法可以覆盖ajax面板?我不能将按钮放在面板外面,因为它在网格内,因此阻止我做任何动作。我该如何调用它?
我的AjaxPanel:
<telerik:RadAjaxPanel runat="server">
<p style="font-family: Arial;">טבלת סוכנים</p>
<telerik:RadGrid runat="server" ID="gvClients" ClientSettings-EnablePostBackOnRowClick="true" CellSpacing="0" GridLines="None" Skin="Glow" DataSourceID="SqlDataSource1" AllowPaging="True" AllowSorting="True" OnSelectedIndexChanged="gvClients_SelectedIndexChanged" OnDataBound="gvClients_DataBound" AutoGenerateColumns="False">
<ClientSettings>
<Selecting AllowRowSelect="True" />
</ClientSettings>
<MasterTableView DataKeyNames="id" DataSourceID="SqlDataSource1" HierarchyLoadMode="Client">
<Columns>
<telerik:GridBoundColumn DataField="seniorId" DataType="System.Int32" FilterControlAltText="Filter seniorId column" HeaderText="seniorId" SortExpression="seniorId" UniqueName="seniorId" Visible="False">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="id" DataType="System.Int32" FilterControlAltText="Filter id column" HeaderText="תעדות זהות" ReadOnly="True" SortExpression="id" UniqueName="id">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="password" FilterControlAltText="Filter password column" HeaderText="סיסמא" SortExpression="password" UniqueName="password">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="fName" FilterControlAltText="Filter fName column" HeaderText="שם פרטי" SortExpression="fName" UniqueName="fName">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="lName" FilterControlAltText="Filter lName column" HeaderText="שם משפחה" SortExpression="lName" UniqueName="lName">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="mPhone" FilterControlAltText="Filter mPhone column" HeaderText="מספר טלפון" SortExpression="mPhone" UniqueName="mPhone">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="address" FilterControlAltText="Filter address column" HeaderText="כתובת" SortExpression="address" UniqueName="address">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="sc" DataType="System.Byte" FilterControlAltText="Filter sc column" HeaderText="sc" SortExpression="sc" UniqueName="sc" Visible="False">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="email" FilterControlAltText="Filter email column" HeaderText="אימייל" SortExpression="email" UniqueName="email">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="dateJoined" DataFormatString="{0:HH:mm dd-MM-yyyy}" DataType="System.DateTime" FilterControlAltText="Filter dateJoined column" HeaderText="תאריך הצטרפות" SortExpression="dateJoined" UniqueName="dateJoined">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="contract" FilterControlAltText="Filter contract column" HeaderText="קובץ חוזה" SortExpression="contract" UniqueName="contract" Visible="False">
<ColumnValidationSettings>
<ModelErrorMessage Text="" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn HeaderText="הורד קובץ" UniqueName="downloadcolumn">
<ItemTemplate>
<telerik:RadButton runat="server" CommandArgument="<%#Container.ItemIndex %>" OnCommand="btnDownload_Command1" id="btnDownload" Text="הורד"/>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
<PagerStyle AlwaysVisible="True" />
</MasterTableView>
</telerik:RadGrid>
<br />
<br />
<table style="float: right; display: inline-block;">
<tr>
<td class="auto-style1">
<p>תעודת זהות</p>
</td>
<td>
<telerik:RadTextBox runat="server" MaxLength="9" ID="txtId" Width="200px" Skin="Glow" /></td>
</tr>
<tr>
<td class="auto-style1">
<p>סיסמא</p>
</td>
<td>
<telerik:RadTextBox ID="txtPassword" MaxLength="25" runat="server" Width="200px" Skin="Glow" />
</td>
</tr>
<tr>
<td class="auto-style1">
<p>שם פרטי</p>
</td>
<td>
<telerik:RadTextBox ID="txtfName" MaxLength="25" runat="server" Width="200px" Skin="Glow" />
</td>
</tr>
<tr>
<td class="auto-style1">
<p>שם משפחה</p>
</td>
<td>
<telerik:RadTextBox ID="txtlName" MaxLength="25" runat="server" Width="200px" Skin="Glow" />
</td>
</tr>
<tr>
<td class="auto-style1">
<p>מספר טלפון</p>
</td>
<td>
<telerik:RadTextBox ID="txtmPhone" MaxLength="25" runat="server" Width="200px" Skin="Glow" />
</td>
</tr>
<tr>
<td class="auto-style1">
<p>כתובת</p>
</td>
<td>
<telerik:RadTextBox ID="txtAddress" MaxLength="50" runat="server" Width="200px" Skin="Glow" />
</td>
</tr>
<tr>
<td class="auto-style1">
<p>אימייל</p>
</td>
<td>
<telerik:RadTextBox ID="txtEmail" MaxLength="50" runat="server" Width="200px" Skin="Glow" />
</td>
</tr>
<tr>
<td class="auto-style1">
<telerik:RadButton ID="btnUpdate" runat="server" Skin="Glow" Width="126px" Text="עדכן" OnClick="btnUpdate_Click" Enabled="False" />
</td>
<td>
<telerik:RadButton ID="btnDelete" runat="server" Width="83px" Skin="Glow" Text="מחק" OnClick="btnDelete_Click" Enabled="False" />
<telerik:RadButton ID="btnAdd" runat="server" Width="84px" Skin="Glow" Text="הוסף" OnClick="btnAdd_Click" />
</td>
</tr>
<tr>
<td class="auto-style1">
<p>צרף חוזה</p>
</td>
<td>
<telerik:RadAsyncUpload ID="AsyncUpload" MultipleFileSelection="Disabled" MaxFileInputsCount="1" runat="server" Skin="Metro" Enabled="false">
<Localization Select="בחר קובץ" />
</telerik:RadAsyncUpload>
</td>
</tr>
<tr>
<td class="auto-style1">
<asp:Label runat="server" ID="lblDone" Text="הפעולה בוצעה בהצלחה" ForeColor="Red" Visible="false" /></td>
<td>
<telerik:RadButton ID="btnUpload" OnClick="btnUpload_Click" Enabled="false" runat="server" Skin="Glow" Text="העלה קובץ" Width="175px" />
</td>
</tr>
</table>
</telerik:RadAjaxPanel>
按钮点击开始代码:
protected void btnDownload_Command1(object sender, CommandEventArgs e)
{
GridDataItem item = gvClients.Items[Convert.ToInt32(e.CommandArgument)];
GetUserData usr = new GetUserData(item["id"].Text, Security.level.Agent, servermap);
string file = usr.RetrieveContractPath();
SendFileDownload(file);
}
文件下载功能已经过检查,运行完美。我100%保证问题出在updatePanel中。
答案 0 :(得分:1)
我遇到了与你完全相同的问题,Rad Ajax Panel不支持文件上传和操作,因为这需要完整的回发,并且面板仅支持Ajax部分调用。我们通过在Ajax面板之外运行的模态对话框中实现文件处理程序来解决这个问题!
希望这会有所帮助。
它应该是这样的:
protected void btnDownload_Command1(object sender, CommandEventArgs e)
{
GridDataItem item = gvClients.Items[Convert.ToInt32(e.CommandArgument)];
GetUserData usr = new GetUserData(item["id"].Text, Security.level.Agent, servermap);
string file = usr.RetrieveContractPath();
// SendFileDownload(file); dont call it here , call it in the other window
string url = "PopupFileDownload.aspx?file="+file;
string s = "window.open('" + url + "', 'popup_window', 'width=300,height=100,left=100,top=100,resizable=yes');";
ClientScript.RegisterStartupScript(this.GetType(), "script", s, true);
}
//然后在popupFileDownload.aspx中,像这样处理Page_load:
protected void Page_Load(Object sender, EventArgs e)
{
SendFileDownload(Request.QueryString["file"]);
}
答案 1 :(得分:1)
更简单的方法是在网格外添加一个不可见的服务器按钮,并通过javascript调用它的回发。这是按钮:
<asp:Button ID="cmdDownload" runat="server" Visible="False" />
然后,按如下方式添加一些javascript:
<script type="text/javascript">
function goFile(id) { __doPostBack('<%=cmdDownload.UniqueID %>', id);}
</script>
接下来,按如下方式修改网格中的按钮:
<ItemTemplate>
<button type="button" onclick="goFile('<%#Container.ItemIndex%>')">הורד</button>
</ItemTemplate>
当你的下载按钮点击事件触发时,你可以通过Request.Params("__EventArgument")
获取项目的索引并将文件发送给用户。
您可能需要稍微调整一下代码才能使其正常工作,但在很多情况下我已成功使用它。