北天软件工作室
北天软件集网站建设、网站开发、软件开发、网站优化SEO、网站宣传、网站开发成一体的网络公司。北天软件是专业的网站建设、网站开发、设计、制作和网站国际推广、搜索引擎推广的网络公司。口号:考虑企业所需,实现企业所想。JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!   旧版java技术网 | 设为首页 | 文章搜索 | RSS订阅地图
免费使用JavaCMS自助建站系统
  文章搜索:   
初学者园地  javascript  java技术  .Net技术 XML/WebService  数据库技术  web2.0技术  设计模式  设计框架  SEO技术  综合知识
您现在的位置是: 北天软件门户网>>.Net技术>>详细信息
ASP.NET多附件上传和附件编辑的实现
欢迎进入.NET社区论坛,与200万技术人员互动交流 >>进入

       在写这篇文章之前我也在Google上找到了很多有关多附件上传的文章,有用ASP.NET实现的,也有用JSP、PHP等其它技术实现的,但基本前提都是事先通过js脚本来动态创建DOM,然后上传的时候在服务端做一下处理,有点类似于163的邮件系统。文件上传需要通过页面的POST方法进行提交,这个我在一次MOSS开发中iFrame表单提交的古怪问题解决一问中已经阐述过,其中包括了如何使用页面隐藏的iFrame来提交表单从而避免整个页面提交到服务器而导致页面的刷新。多附件上传的原理与之类似,只不过需要事先通过脚本在页面上动态创建多个input type='file'的标签,当然,如果要想功能更加完美,你可能还需要通过脚本动态添加一些按钮事件以让用户可以删除他所添加的文件。下面是一个应用效果的截图。

6-16-2009 10-07-30 AM

    其中红色方框内的内容是通过脚本在页面上动态创建的,将用户在客户端所选文件的文件名动态添加到一个div里,同时在这个div中放一个隐藏的input type=’file’的标签,它的value为用户所选文件的路径,然后在div中放置一个img,添加onmouseover和onmouseout事件为图片增加了一些鼠标滑动时的效果,onclick事件用来响应用户点击img时删除对应的文件。看一下代码中的具体实现。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="MultiAffix.js" type="text/javascript"></script>
    <script type="text/javascript">
        var controlName = 1; // This variable is for the dynamic file controls's name.

        function addImg(targetElement, savestatsElement, oldimgElement) {
            var browseimgElement = $get("browseimg");
            var arr = browseimgElement.getElementsByTagName('input');
            if (arr.length == 0 || arr[0].value.length == 0) {

                alert('No file inputs.');
                return;
            }
            var oldbrowser = arr[0];
            var filename = getfilename(oldbrowser.value);
            if (!validateimgtype(oldbrowser.value)) return;
            if (!validateimgcount(targetElement, 3)) return;
            var imgtitles = savestatsElement.value + oldimgElement.value;
            if (validateimgexist(filename, imgtitles)) { alert('You have already added this image!'); return; }
            if (oldbrowser != undefined) {
                var newbrowser = oldbrowser.cloneNode(true);
                newbrowser.value = '';
                var newfile = document.createElement('div');
                newfile.innerHTML = filename + '&nbsp;&nbsp;';

                // Create a button element for delete the image.
                var newfileimgbutton = document.createElement('img');
                newfileimgbutton.src = 'ShoutOut_Close.gif';
                newfileimgbutton.alt = 'Delete';
                newfileimgbutton.onclick = function() {
                    this.parentNode.parentNode.removeChild(this.parentNode);
                    savestatsElement.value = updatehiddenimgs(filename, savestatsElement.value);
                }
                newfileimgbutton.onmouseover = function() {
                    this.src = 'ShoutOut_Close_rollover.gif';
                }
                newfileimgbutton.onmouseout = function() {
                    this.src = 'ShoutOut_Close.gif';
                }

                browseimgElement.replaceChild(newbrowser, oldbrowser);
                oldbrowser.name = ++controlName;
                oldbrowser.style.display = 'none';
                newfile.appendChild(oldbrowser);

                newfile.appendChild(newfileimgbutton);
                targetElement.appendChild(newfile);

                $get("chkAgree").checked = false;
                $get("btAdd").disabled = true;
                savestatsElement.value += filename + '|';
            }
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <div>
            Description:
            <asp:TextBox ID="tbDescription" MaxLength="2000" runat="server" TextMode="MultiLine"></asp:TextBox>
        </div>
        <div>
            Location:
            <asp:DropDownList ID="ddlLocation" runat="server">
            </asp:DropDownList>
        </div>
        <div>
            Display Posted By User:
            <asp:CheckBox ID="chkPostedByUser" Checked="true" runat="server" />
        </div>
        <div>
            Notify Shout out User:
            <asp:CheckBox ID="chkNotifyUser" runat="server" />
        </div>
        <div>
            Notify Shout out to Email:
            <asp:TextBox ID="tbShoutoutToEmail" MaxLength="25" runat="server"></asp:TextBox>
        </div>
        <div>
            Images:
            <div id="saveshoutoutimgs" runat="server">
            </div>
            <input id="btAddImage" type="button" onclick="$get('saveshoutoutaddimgs').style.display='block';this.disabled=true;"
                value="Click here to Add Image" />
        </div>
        <div id="saveshoutoutdetailshowimg">
            <div id="saveshoutoutaddimgs" style="display: none;">
                <div>
                    Add Image:</div>
                <div id="browseimg">
                    <input type="file" />
                </div>
                <div>
                    Size limit of the images is 100kb. Hieght and Width of the images should not exceed
                    200px.</div>
                <div>
                    <input id="chkAgree" type="checkbox" onclick="$get('btAdd').disabled=!this.checked;" />I
                    agree.legal signoff text to be defined.
                </div>
                <div>
                    <input id="btAdd" disabled="disabled" type="button" value="Add" runat="server" />
                </div>
            </div>
        </div>
    </div>
    <asp:TextBox ID="tbImgs" runat="server" Text="|" Style="display: none;"></asp:TextBox>
    <asp:TextBox ID="tbOldImgs" runat="server" Text="|" Style="display: none;"></asp:TextBox>
    </form>
</body>
</html>
 

protected void Page_Load(object sender, EventArgs e)
{
    string script = string.Format("addImg($get('{0}'), $get('{1}'), $get('{2}'));",
        this.saveshoutoutimgs.ClientID,
        this.tbImgs.ClientID,
        this.tbOldImgs.ClientID);
    this.btAdd.Attributes.Add("onclick", script);
}
    代码建立在Ajax.net基础之上,环境是Visual Studio 2008 + Windows 2003,测试通过!

    简单做一下说明:

    1. <div id="saveshoutoutimg" runat="server"/>用来存放动态添加的文件相关标签。

    2. btAddImage被点击后自身将被disabled掉,然后显示saveshoutoutaddimgs整个div。

    3. 在saveshoutoutaddimgs中用户可以完成文件的选取和确认操作,chkAgree用来enable btAdd按钮。

    4. 当用户点击btAdd时,触发onclick事件,该事件在code-behind的Page_Load方法中注册,

[1] [2] [3] 下一页

关闭窗口 】   【 返回首页
推荐文章
· ASP.NET刷新页面的六...
· 2009业务流程管理(BPM...
· 在.NET环境下为网站...
· 扩展方法(2) Gri...
· 浅谈.net 中的...
· C#实现的多线程异步So...
· 在 Java 平台上进行...
· 多线程Java 应用程序...
· 通过Java编程处理XML...
· 详解SQL中FOR XML子...
· 总结用XML配置的十二...
· Windows 7采用Xml格...
· 在Silverlight3中消耗...
· Eclipse SDK 3.5RC2(S...
· NetBeans 6.7 RC1发布
· JDK7中的Java NIO.2 F...
· Eclipse Ganymede:深...
· Eclipse配置的备注
· NetBeans 6.7 RC3发布
· Windows XP操作系统...
北天软件工作室 粤ICP备06079815号 版权所有©2006-2008
精彩出品 JavaCMS自助建站 (C)2006-2008 www.it3838.com limited.all rights reserved.
Powered by JavaCMS V2.6.0