Asp.net 如何在ajax面板中向用户发送文件
我有一个radgrid,每行都有一个按钮向用户发送一个文件。网格位于更新面板中,保持这种状态至关重要。有没有一种方法可以覆盖ajax面板?我不能将按钮放在面板外,因为它位于网格内,因此无法执行任何操作。我如何调用这个 我的AjaxPanel:Asp.net 如何在ajax面板中向用户发送文件,asp.net,ajax,telerik,Asp.net,Ajax,Telerik,我有一个radgrid,每行都有一个按钮向用户发送一个文件。网格位于更新面板中,保持这种状态至关重要。有没有一种方法可以覆盖ajax面板?我不能将按钮放在面板外,因为它位于网格内,因此无法执行任何操作。我如何调用这个 我的AjaxPanel: <telerik:RadAjaxPanel runat="server"> <p style="font-family: Arial;">טבלת סוכנים</p>
<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>
文件下载功能已经过检查,工作正常。我有100%的把握,问题出在updatePanel中。我遇到了与您完全相同的问题,Rad Ajax面板不支持文件上传和操作,因为这需要完整的回发,面板只支持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中,按如下方式处理页面加载:
protected void Page_Load(Object sender, EventArgs e)
{
SendFileDownload(Request.QueryString["file"]);
}
更简单的方法是在网格外添加一个不可见的服务器按钮,并通过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>
函数goFile(id){uu doPostBack('',id);}
接下来,在网格中修改按钮,如下所示:
<script type="text/javascript">
function goFile(id) { __doPostBack('<%=cmdDownload.UniqueID %>', id);}
</script>
<ItemTemplate>
<button type="button" onclick="goFile('<%#Container.ItemIndex%>')">הורד</button>
</ItemTemplate>
הורד
当下载按钮单击事件触发时,您可以通过Request.Params(“\uu EventArgument”)
获取项目的索引,并将文件发送给用户
您可能需要对代码进行一些调整以使其正常工作,但我已经在许多情况下成功地使用了它。这听起来太复杂了,我目前无法理解。我想我可以在这个网络表单上告别ajax。查看编辑,它并不太复杂,但我想这取决于你是否真的需要ajax。出于某种原因,弹出窗口无法工作。可能是我的浏览器阻止了它吗?我没有看到弹出窗口被阻止的消息,此外,当调试时,这些代码行被相应地调用,没有错误。编辑:它不能是我的浏览器。我尝试了4种不同的浏览器,得到了相同的结果。但需要注意的是,我使用的是Telerik的Ajax面板,而不是ASP。因为telerik支持在面板中包含表,所以我认为问题仍然在于Ajax面板。telerik Ajax面板正在阻止弹出。虽然您的解决方案更智能、更简单,但它需要我使用html按钮,而html按钮的外观远不如telerik的控件。但这将在不久的将来派上用场。谢谢您可以在ItemTemplate中使用任何其他HTML。您所需要做的就是处理onclick事件来触发javascript。如果您愿意,您可以查看Telerik按钮的呈现HTML并使用它。