一、系统功能
具有课件文件上传和课件的名称、科目、年级、制作者、说明等信息的上传、全部课件目录的显示、单个课件下载功能。
二、编程说明
ASP.Net 2.0中微软内置了更多控件,在1.x中需要程序员费尽心思才能完成的功能,在2.0中只需要简单地套用这些控件就能完成。
1.AccessDataSource控件
ASP.Net 2.0包含了AccessDataSource控件,用来从Access数据库中将数据提取至ASP.Net 2.0(.aspx)页面。这个控件拥有的属性很简单。AccessDataSource的最重要的属性是DataFile属性,用来指向硬盘上MDB文件的路径。AccessDataSource拥有的其他属性还有SelectCommand,用来设定一个显示需要返回的结果集(表和列)的语句。SelectCommand必须使用SQL语法来定义。
在VS.Net 2005 Beta 2中,可以用两种方式来添加AccessDataSource控件至页面。如果MDB文件被添加至Database Explorer中,那么可以拖放列名称至页面上,而且VS.Net 2005 Beta 2将会自动创建AccessDataSource控件和GridView来显示数据。如果不想使用GridView或者想定制控件,那么可以只从工具框中添加AccessDataSource控件并通过配置向导进行安装。向导将会提示浏览查找数据文件,并且允许通过在数据库的表中选择列来指定SelectCommand。如果是在VS.Net 2005 Beta 2之外输入页面,那么可以按照如下所示代码来输入:
<asp:AccessDataSource>
ID="MySourcName"
Runat="server"
DataFile="MyMDBName.mdb"
SelectCommand="SELECT MyField1, MyField2 FROM MyTable">
</asp:AccessDataSource>
需要再次提及的特性很简单。所要提供的就是一个ID、MDB文件名以及一个SelectCommand。
2.GridView控件
Asp.net 1.1版本流行控件DataGrid的继承者,功能比DataGrid增强不少,但是也有很大的不同。
(1)掩藏字段的处理
DataGrid可以将字段直接设置为Visible=false,可以通过Cell[x].Text取到值。 GridView这个功能失效了,可以使用运行时来设定该列为掩藏。处理RowDataBound事件。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[5].Visible = false;
}
(2)获取所选列的数据
DataGrid可以直接通过所选行来获取,GridView同样的代码无法运行。GridView 可以通过GridViewRow来获取。BtnAudit是模板列中的按钮。
GridViewRow grdRow = (GridViewRow)btnAudit.Parent.Parent;
string strId = grdRow.Cells[0].Text;
string memberId = grdRow.Cells[5].Text;
最终删除一条数据之前进行确认,这个可以使用摸版列,在模板列中放置按钮控件,其中有一个客户端事件onclientclick,这里可以写确认处理javascript脚本:
<asp:TemplateField> <ItemTemplate>
<asp:Button ID="btnRefuse" runat="server" OnClick="btnRefuse_Click" Text="拒绝" OnClientClick="return confirm(‘ 你真的要拒绝这个用户加入?‘)"/>
</ItemTemplate>
</asp:TemplateField>
3.FormView 控件
FormView 控件可以使用数据源中的单个记录,该控件与 DetailsView 控件相似。FormView 控件和 DetailsView 控件之间的差别在于 DetailsView 控件使用表格布局,在该布局中,记录的每个字段都各自显示为一行。而 FormView 控件不指定用于显示记录的预定义布局。实际上,将创建一个包含控件的模板,以显示记录中的各个字段。该模板中包含用于创建窗体的格式、控件和绑定表达式。
FormView 控件通常用于更新和插入新记录,主控件的选中记录决定要在 FormView 控件中显示的记录。有关更多信息及示例,请参见使用 FormView Web 服务器控件修改数据。
FormView 控件依赖于数据源控件的功能执行诸如更新、插入和删除记录的任务。即使 FormView 控件的数据源公开了多条记录,该控件一次也只显示一条数据记录。
FormView 控件可以自动对它的关联数据源中的数据进行分页,一次一个记录,但前提是数据由实现 ICollection 接口的对象表示或基础数据源支持分页。FormView 控件提供了用于在记录之间导航的用户界面 (UI)。若要启用分页行为,请将 AllowPaging 属性设置为 true,并指定一个 PagerTemplate 值。
FormView 控件公开可以处理的多个事件,以便执行自己的代码。这些事件在对关联的数据源控件执行插入、更新和删除操作之前和之后引发。还可以为 ItemCreated 和 ItemCommand 事件编写处理程序。有关更多信息,请参见 FormView Web 服务器控件事件。
4.FileUpload 控件
使用 FileUpload 控件,可以为用户提供一种将文件从用户的计算机发送到服务器的方法。该控件在允许用户上传图片、文本文件或其他文件时很有用。
(1)提示上传的文件
FileUpload 控件显示一个文本框,在此用户可以键入希望上传到服务器的文件的名称。该控件还显示一个“浏览”按钮,该按钮显示一个文件导航对话框。(显示的对话框取决于用户计算机的操作系统。)出于安全方面的考虑,不能将文件名预加载到 FileUpload 控件中。
(2)处理上传的文件
用户选择要上传的文件并提交页面后,该文件作为请求的一部分上传,文件将被完整地缓存在服务器内存中。文件完成上传后,页代码开始运行。
三、方案实现
1.服务器的搭建
安装Windows2000(XP专业版,Server2003)+IIS5.0(IIS6.0)+ +.NET Framework 2.0 + VS.Net 2005 Beta 2+Access软件,建立d:\kejian 文件夹,用来存放应用程序文件,在它的下面建立“files”文件夹,用来存放上传的课件文件。在默认网站上建立虚拟目录“kj”,并把它指定到“d:\kejian”文件夹(步骤:打开Internet 信息服务(控制面板→管理工具→Internet 信息服务,展开默认网站(本地计算机→网站→默认网站→右键默认网站→新建→虚拟目录→下一步→别名(kj)→网站内容目录(”d:\kejian”)→下一步→完成),设置files文件夹的权限,使它让使用ASP.Net的账户是可写,这样才能将文件保存到指定的文件夹中(方法:打开资源管理器,然后定位到要添加该权限的文件夹即可。右击该文件夹(本例中为 files 文件夹),然后选择属性。在属性对话框中,单击安全选项卡,确保列表中包括 ASP.Net 机器账户,该账户具有写入磁盘的适当权限)。
2.数据库的设计
在Access中建立数据库“kejian”,在库中添加课件表“kejian”,分别建立以下字段:编号(自动编号)(设为主键)、课件名称(文本)、科目(文本)、年级(文本)、制作者(文本)、说明(文本)、文件名(文本),字段大小为默认值50,并把它保存在“d:\kejian”文件夹下。
3.程序设计
(1)课件上传
启动VS.Net 2005 Beta 2,打开“d:\kejian”网站,在菜单栏上选择“网站”→“新建项”,在“添加新项”窗口中选择“Web窗体”模板,在“名称”后的文本框中输入文件名“upload.aspx”,在“语言”后选择“Visual C#”语言,然后单击“添加”按纽。进入“upload.aspx”的设计窗口,从工具箱上依次拖 AccessDataSource、FormView、FileUpload 控件各一个和两个Label 控件和一个HyperLink控件,并使每个控件占一行。右键AccessDataSource1控件,在弹出菜单上选择“配置数据源”选项,弹出配置数据源向导的选择数据库,单击“浏览”按纽,弹出“连接Microsoft Access 数据库”窗口,在此窗口中选择“kejian.mdb”后确定,回到配置数据源向导的选择数据库窗口,选择下一步,在列下选择字段所有字段(*),再单击“高级”按纽,选择“生成INSERT、UPDATE 和DELETE 语句(G)”后确定,选择“下一步”按纽,再选择“完成”按纽。选择FormView1 控件,在“属性”窗口中把它的DataSourceID 属性指定为AccessDataSource1,把DefaultMode 指定为Insert;右键FormView1 控件,在弹出菜单上选择“编辑模板”的“InsertItemTemplate”,进入模板编辑状态,把“文件名TextBoxs ”控件的Visual属性设为False,把“文件名”文字删除。把FileUpload1 控件拖入“InsertItemTemplate”模板中,双击“插入”控件进入源代码窗口,在click事件输入以下代码
{LinkButton link = FormView1.FindControl("InsertButton") as LinkButton;
string path = MapPath("~/files/"); // MapPath()取当前文件的绝对目录.
FileUpload f = FormView1.FindControl("FileUpload1") as FileUpload;
TextBox tb = FormView1.FindControl("文件名TextBox") as TextBox;
if (f.HasFile)
{string fileExt = System.IO.Path.GetExtension(f.FileName);
if ((fileExt == (".zip")) || (fileExt == (".rar"))) //控制要上传的文件类型
{ try
{string nam = f.PostedFile.FileName; //取得文件名(抱括路径)里最后一个"."的索引
int i = nam.LastIndexOf("."); //取得文件扩展名
string newext = nam.Substring(i);
//这里自动根据日期和文件大小不同为文件命名,确保文件名不重复
DateTime now = DateTime.Now; // 取得系统当前时间
string newname = now.DayOfYear.ToString() + f.PostedFile.ContentLength;
//保存文件到所要的目录,这里是IIS根目录下的files目录.你可以改变.
f.PostedFile.SaveAs(path + newname + newext);
Label1.Text = newname + newext; //把上传后的文件名传给控件label1的文本
Label2.Text = "文件上传成功!";
tb.Text = Label1.Text;}
catch (Exception ex)
{Label2.Text = "ERROR: " + ex.Message.ToString();}}
else
{link.CausesValidation = false;
link.CommandName = "Cancel";
Label2.Text = "只能选择rar,zip 文件";}}
else
{ link.CausesValidation = false;
link.CommandName = "Cancel";
Label2.Text = "你还没有选定文件";}}
并把<InsertParameters>节中的<asp:Parameter Name="编号" Type="Int32" />这一行删除,把 InsertCommand="INSERT INTO [kejian] ([编号], [课件名称], [科目], [年级], [制作者], [说明], [文件名]) VALUES (?, ?, ?, ?, ?, ?, ?)"改为InsertCommand="INSERT INTO [kejian] ([课件名称], [科目], [年级], [制作者], [说明], [文件名]) VALUES (?, ?, ?, ?, ?, ?)"。回到设计窗口,把“HyperLink1”控件的NavigateUrl属性设定为 show.aspx ,并把它的Text 属性改为“显示课件”。
(2)课件显示
按照前面介绍的方法创建一个名为“show.aspx”Web窗体。在窗体中拖入AccessDataSource、GridView、HyperLink 控件各一个,按照前面的方法配置AccessDataSource1的数据源,把GridView1控件属性的DataSourceID设定为AccessDataSource1,单击GridView1控件右上角的小箭头弹出GridView1任务菜单,在菜单选择“添加新列”,弹出“添加字段”窗口,在页眉文本下输入“下载”文字,在超链接文本的指定文本下输入“进入”文字,在超链接URL中的从数据字段获取URL(U)下选择“编号”字段,在URL格式字符串下输入download.aspx?id={0},然后确定。把HyperLink1控件的NavigateUrl属性设为upload.aspx,text属性设定为“上传课件”。
(3)课件下载
按照前面介绍的方法创建一个名为“download.aspx”Web窗体。在窗体中拖入AccessDataSource、FormView控件各一个和两个HyperLink按件,按照前面的方法配置AccessDataSource1的数据源,把FormView1控件的DataSourceID 属性设定为AccessDataSource1,把HyperLink1控件的Text属性设为“下载此课件”,把HyperLink2的Text属性设为“显示课件”,NavigateUrl属性设为show.aspx 。在窗体的Page_Load事件中输入以下代码:
{Label name = FormView1.FindControl("文件名Label") as Label;
HyperLink1.NavigateUrl = "~/files/" +name.Text;}
(4)解决上传文件大小限制
默认情况下,使用 FileUpload 控件上传到服务器的文件最大为 4MB 左右。不能上传超过该限制的任何内容。然而,关于 .NET 的重要一点是,它通常会提供一种规避限制的方法。通常可以更改正在使用的默认设置。要更改大小限制,可以在 web.config.comments 文件(可以在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 的 ASP.Net 2.0 配置文件夹中找到)文件中进行一些改动。
在 web.config.comments 文件中,查找一个名为 <executionTimeout>的节点,如下所示:
<httpRuntime
executionTimeout="110"
maxRequestLength="4096"
……
apartmentThreading="false" />
在这个节点上进行了许多操作,但负责上传文件大小的设置是 maxRequestLength 属性。默认情况下,该属性设置为 4096 千字节 (KB)。只需更改此值,就可以增加可上传到服务器的文件大小。如果想要允许将 10 兆字节 (MB) 的文件上传到服务器,则将 maxRequestLength 值设置为 11264,这意味着该应用程序允许将最大为 11000 KB 的文件上传到服务器。
|