(2)实现上载单个照片
在Photos.aspx页面中,用户不仅可以实现批量上载图片,而且还可以实现上载单个图片。与在ASP.NET 1.x中实现文件上传的方法不同,本应用程序使用了ASP.NET 2.0提供的新功能予以实现,这为读者开拓了新视野。相关源代码如下所示。
|
<h4>添加照片</h4> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="PhotoManager" SelectMethod="GetPhotos" InsertMethod="AddPhoto" DeleteMethod="RemovePhoto" UpdateMethod="EditPhoto"> |
如上代码所示,其中主要包括了FormView、ObjectDataSource控件。同时,FormView控件的InsertItemTemplate模板属性中还定义了RequiredFieldValidator、FileUpload、TextBox和ImageButton控件。可能部分读者会感到疑惑:FormView控件通常用于显示数据源中的单条数据记录,它为何用到上载文件的实现当中内?实际上,从本质上而言,本小节所实现的功能是将照片和照片标题信息添加到数据库中,是一个添加单条数据的实现过程。使用FormView控件的模板属性InsertItemTemplate,并结合双向数据绑定表达式Bind,可以快速实现从客户端提交图片和图片标题的功能。具体与数据库交互的任务由ObjectDataSource控件实现。如代码所示,ObjectDataSource控件设置了TypeName、InsertMethod、SelectMethod、DeleteMethod、UpdateMethod、SelectParameters和InsertParameters等属性。与添加单条数据相关的只有TypeName、InsertMethod和InsertParameters属性,其他属性用于实现对对照片列表的显示和管理(下一小节分析)。由于该过程与上一小节中实现添加照片的过程同样都引用了AddPhoto方法,因此,不再多做说明。具体实现过程和代码分析参见上一小节内容。另外,在FormView控件中还定义了ItemInserting事件处理程序FormView1_ItemInserting。
ItemInserting事件当插入数据前引发,通常可在此事件对应处理程序中执行一些先期条件判断。此处,在FormView1_ItemInserting中实现了上载文件大小的判断。具体代码如下所示。
| protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e) { if (((Byte[])e.Values["BytesOriginal"]).Length == 0) e.Cancel = true; } |
| 第1页:实现批量上载图片 | 第2页:实现上载单个照片 |
| 第3页:实现照片列表管理 | 第4页:实现照片显示和自定义分页 |