显示列表

想实现点击一个链接后,跳出一个窗口下载图片。
如果用 Response.Redirect("图片地址") 会打开这个图片,并不是跳出图片下载窗口。
Response.Redirect("压缩包地址"),就会跳出下载窗口,因为浏览器能打开图片,不能打开压缩包。

下面一些代码可让浏览器跳出一个窗口下载图片


System.IO.FileInfo file = new System.IO.FileInfo("图片地址");
Response.Clear();
//  添加头信息,为"文件下载/另存为"对话框指定默认文件名
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();

查看全文 | 分类(Asp.Net) | 访问(0) | 编辑

当删除Access数据库中的数据时,数据库并不会变小,只有压缩后,才能变成正常大小。
除了手工操作压缩数据库,在C#的程序中也可以压缩Access数据库。
这要调用 msjro.dll 这个程序集中的JetEngineClass对象。

首先要引入程序集,引用 C:\Program Files\Common Files\System\ado\msjro.dll

代码如下:
string access = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("abc.mdb");
string accessTemp = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("abcTemp.mdb");

JRO.JetEngineClass jt = new JRO.JetEngineClass();
jt.CompactDatabase(access, accessTemp); // 开始压缩,会生成一个新数据库

这样会新生成一个 abcTemp.mdb 数据库文件,这个是压缩后。
再删除原来的数据库,并重命名压缩后数据库名称就可以实现效果。

查看全文 | 分类(Asp.Net) | 访问(6) | 编辑

使用@ OutputCache 指令,能够实现对页面输出缓存。

使用OutputCache 指令两个必要属性
1.Duration 表示缓存的时间,单位为秒。
2.VaryByParam 不使用缓存的参数,其值为用分号分隔的字符串列表。

<%@ OutputCache Duration="60" VaryByParam="none" %>
页面不管参数如何变化,都会使用缓存中的内容,在1分钟内。

<%@ OutputCache Duration="60" VaryByParam="*" %>
页面只要有参数有变化,就不使用缓存中的内容。

<%@ OutputCache Duration="60" VaryByParam="ID;ClassID" %>
页面只要ID和ClassID参数没有变化,就输出缓存中的内容,在1分钟内。

参数指GET或POST中的参数。

一个例子。
Show.aspx 页面使用 <%@ OutputCache Duration="60" VaryByParam="ID;ClassID" %>
请求1:Show.aspx?ID=1&ClassID=2&Page=2
请求2:Show.aspx?ID=1&ClassID=2&Page=4
A用户先使用了请求1,这后又发动了请求2,这时请求2会从缓存中读取来。因为ID和ClassID参数和请求1中的没有变化。

查看全文 | 分类(Asp.Net) | 访问(7) | 编辑

以前一直用 System.Web.HttpContext.Current.Server.MapPath("/") 返回网站根目录
还有一种是 System.Web.HttpContext.Current.Server.MapPath("~") 返回应用程序根目录
这种如果是虚拟目录,那么就返回虚拟目录的路径

System.Web.HttpContext.Current.Server.MapPath("/"),就是返回根目录,无视虚拟目录。

常用
System.Web.HttpContext.Current.Server.MapPath("~/")

查看全文 | 分类(Asp.Net) | 访问(12) | 编辑

System.Web.HttpContext.Current.Server.MapPath("/") 
这个常用来表示网站的根目录,但是在多线程中,会发生未将对象引用设置到对象的实例。
所以不要分布在不同的类中,尽量在一个全局位置,然后其它类共用这个,毕竟网站的目录是不会改变的,可以用一个静态变量表示。

查看全文 | 分类(Asp.Net) | 访问(10) | 编辑

<script language="C#" runat="server">
protected void Page_Load(object sender, System.EventArgs e)
{
   Response.ContentType = "application/x-shockwave-flash";
   string fileFlash = Server.MapPath("/") + "1.swf";
   System.IO.FileStream fileStream = new System.IO.FileStream(fileFlash, System.IO.FileMode.Open);
   byte[] buffer = new byte[fileStream.Length];
   fileStream.Read(buffer,0,(int)fileStream.Length);
   Response.BinaryWrite(buffer);
}
</script>

标签:下载 
查看全文 | 分类(Asp.Net) | 访问(6) | 编辑

当把一个TextBox控件ReadOnly属性设置为True后,这个控件就不回传了。
很奇怪,以前都没有过这样的怪问题,在别人机器上都能正常,想到可能和ASP.NET的版本有关系。
我用的是 ASP.NET 2.0,当改成 ASP.NET 1.0,就正常了,TextBox控件ReadOnly=True,能回传。
在 ASP.NET 1.0 中是ReadOnly=True会回传的。
在 ASP.NET 2.0 中是ReadOnly=True就不会回传了。

解决的方法:
<asp:textbox id="Username" runat="server" ReadOnly="True"></asp:textbox>
去掉ReadOnly="True",改成
<asp:textbox id="Username" runat="server"></asp:textbox>

在后台代码中加入,控制只读属性
Username.Attributes.Add("Readonly", "True");
这样在 ASP.NET 2.0 中只读的TextBox控件也能实现回传。

查看全文 | 分类(Asp.Net) | 访问(7) | 编辑

<asp:datagrid id="DataGrid1" runat="server" BorderWidth="1px" AutoGenerateColumns="False"
   Width="95%" BorderColor="#CCDFF4" AllowPaging="True" CssClass="table"
   DataKeyField="id" AutoGenerateColumns="False">
<Columns>
   <asp:BoundColumn DataField="Name" HeaderText="名称"></asp:BoundColumn>
   <asp:ButtonColumn HeaderText="操作" Text="删除" CommandName="Delete"></asp:ButtonColumn>
</Columns>
</asp:datagrid>



private void InitializeComponent()
{
   this.Load += new System.EventHandler(this.Page_Load);
   this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
   this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
}


需要将 ButtonColumn 绑定事件
private void DataGrid1_ItemCommand(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
   switch(((LinkButton)e.CommandSource).CommandName)
   {
       case "Delete":
           DataGrid1_Delete(sender, e); 
           break;            
       default:
           // Do nothing.
           break;
   }        
}

private void DataGrid1_Over(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
   int id = (int)DataGrid1.DataKeys[e.Item.ItemIndex]; // 返回 DataKeyField 的行值

}

// 创建表格时,每创建一行,触发一次
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
   if(e.Item.ItemType != ListItemType.Header&&e.Item.ItemIndex>=0)
   {
       // e.Item.Controls 当前行所控件
       LinkButton linkButton = (LinkButton)e.Item.Cells[1].Controls[0];
       linkButton.Attributes.Add("onclick", "return confirm('您确定删除么?')"); 
   }
}

标签:DataGrid 
查看全文 | 分类(Asp.Net) | 访问(14) | 编辑
 关于IsPostBack2009-03-09

IsPostBack只有在页面载入里才为true,
当点击按钮事件时,为false。

查看全文 | 分类(Asp.Net) | 访问(4) | 编辑

dropDownList.DataSource = dataSet.Tables[0].DefaultView;
dropDownList.DataTextField = "Name";
dropDownList.DataValueField = "ID";
dropDownList.DataBind();
dropDownList.Items.Insert(0,new ListItem("选择选择",""));

查看全文 | 分类(Asp.Net) | 访问(14) | 编辑
 总数:16   页次:2/2   首 页   上一页   下一页   尾 页