如何在ajax面板中向用户发送文件

时间:2014-08-20 19:30:53

标签: asp.net ajax telerik

我有一个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中。

2 个答案:

答案 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")获取项目的索引并将文件发送给用户。

您可能需要稍微调整一下代码才能使其正常工作,但在很多情况下我已成功使用它。