描述:
C:\Inetpub\wwwroot\mdown\aa\ 目录下有2个文件,(.ppt文件 ,xml文件各一)
将这2文件名显示在DataGrid网格中,并将文件名做成下载链接
当访问.aspx文件(C:\Inetpub\wwwroot\mdown 目录下)能通过文件名链接下载,对于IE可读的xml,强制下载而不显示问题:
DataGrid链接中的xml文件怎么不读取而强制下载(注:按纽事件下的对xml文件强制下载我知道,但DataGrid链接的强制下载的代码该写在那里呢?)附代码:
WebForm1.apsx:<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="mdown.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 56px" runat="server"
Width="96px" Height="160px" AutoGenerateColumns="False">
<Columns>
<asp:HyperLinkColumn DataTextField="name" DataNavigateUrlField="name" DataNavigateUrlFormatString="aa/{0}"></asp:HyperLinkColumn>
</Columns>
</asp:datagrid>
</form>
</body>
</HTML>
WebForm1.csprivate void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
// 在此处放置用户代码以初始化页面
System.IO.DirectoryInfo dinfo = new DirectoryInfo(Server.MapPath("/mdown/aa/"));
System.IO.FileInfo[] fileinfos = dinfo.GetFiles();
DataTable dt = new DataTable();
dt.Columns.Add("name"); foreach(FileInfo fi in fileinfos)
{
System.IO.FileInfo fileinfo= fi; DataRow dr = dt.NewRow();
dr["name"] = fileinfo.FullName.Substring(fileinfo.FullName.LastIndexOf("\\") + 1);
dt.Rows.Add(dr); } DataGrid1.DataSource = dt.DefaultView;
DataGrid1.DataBind();
}
C:\Inetpub\wwwroot\mdown\aa\ 目录下有2个文件,(.ppt文件 ,xml文件各一)
将这2文件名显示在DataGrid网格中,并将文件名做成下载链接
当访问.aspx文件(C:\Inetpub\wwwroot\mdown 目录下)能通过文件名链接下载,对于IE可读的xml,强制下载而不显示问题:
DataGrid链接中的xml文件怎么不读取而强制下载(注:按纽事件下的对xml文件强制下载我知道,但DataGrid链接的强制下载的代码该写在那里呢?)附代码:
WebForm1.apsx:<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="mdown.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 56px" runat="server"
Width="96px" Height="160px" AutoGenerateColumns="False">
<Columns>
<asp:HyperLinkColumn DataTextField="name" DataNavigateUrlField="name" DataNavigateUrlFormatString="aa/{0}"></asp:HyperLinkColumn>
</Columns>
</asp:datagrid>
</form>
</body>
</HTML>
WebForm1.csprivate void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
// 在此处放置用户代码以初始化页面
System.IO.DirectoryInfo dinfo = new DirectoryInfo(Server.MapPath("/mdown/aa/"));
System.IO.FileInfo[] fileinfos = dinfo.GetFiles();
DataTable dt = new DataTable();
dt.Columns.Add("name"); foreach(FileInfo fi in fileinfos)
{
System.IO.FileInfo fileinfo= fi; DataRow dr = dt.NewRow();
dr["name"] = fileinfo.FullName.Substring(fileinfo.FullName.LastIndexOf("\\") + 1);
dt.Rows.Add(dr); } DataGrid1.DataSource = dt.DefaultView;
DataGrid1.DataBind();
}
例:
System.IO.FileInfo file = new System.IO.FileInfo("F:\\mp3\\mp3\\别哭我最爱的人.mp3");
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.Charset="GB2312";
Response.ContentEncoding=System.Text.Encoding.UTF8;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename="+Server.UrlEncode("别哭我最爱的人.mp3"));
Response.AddHeader("Content-Length", file.Length.ToString());
Response.WriteFile(file.FullName);
Response.Flush();
Response.End();你修改一下就可以用了
protected string Query(object o)
{
string temp = "../Anyone/Topic.aspx?ClassId=" + Request.QueryString["ClassId"] + "&TopicId=" + o.ToString();
return temp; }页面端是
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Query(Eval("T_id", "{0}") ) %>'
Target="_blank" Text='<%# Eval("T_title") %>'></asp:HyperLink>
</ItemTemplate>
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.name") %>' NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.name", "aa/{0}") %>' OnClick="LinkButton_Click">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid><script language="C#" runat="server">
private void LinkButton_Click(object sender, System.EventArgs e)
{
string path = Server.MapPath("aa/uploadbooks.xml");
System.IO.FileInfo file = new System.IO.FileInfo(path);
Response.Clear();
Response.Charset="GB2312";
Response.ContentEncoding=System.Text.Encoding.UTF8;
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/ms-excel";
Response.WriteFile(file.FullName);
Response.End();
}
</script>--------
已经能用链接触发函数了。但是怎么将uploadbooks.xml 替换成每次点的哪个文件