亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Asp.Net自定義控件實現圖片的上傳,瀏覽,刪除功能

2019-11-14 16:38:23
字體:
來源:轉載
供稿:網友

4月的時候公司比較閑,就想著自己做點東西,其實主要是為了更加熟悉.Net,畢竟接觸的時間不長,趁著有時間想提高提高。不過當我做到圖片上傳這個功能的時候,就有些停滯不前了,連續寫了兩天也達不到自己想要的標準。后來公司來活,然后就沒有然后了,然而做事總不能半途而廢吧~時隔一個多月,趁著這個周末,我再次拾起了這個項目,而首要工作就是攻破這個圖片上傳控件。

下面說說我的標準是什么子的吧~

1、最多可以上傳三張圖片,超過三張有提示。

2、點擊圖片小圖,有圖片放大功能,再次點擊,圖片恢復原來尺寸。

3、在圖片數量范圍內,可對圖片任意添加,刪除。

看似都是很普通的功能吧,確實如此,只是對.Net自帶的FileUpload進行了小小的擴展。不過我就是在第3條上遇到了問題,主要還是對頁面刷新機制不了解和沒有確定好實現的方法以及不太熟悉自定義控件,不過現在問題都解決了。在給大伙兒說說實現方法之前,先看看效果,沒有美化,單看功能。

1、初始狀態

QQ圖片20140609100418

2、選擇文件

QQ圖片20140609100558

3、上傳圖片

QQ截圖20140609101055

4、查看圖片

QQ截圖20140609101027

5、刪除圖片

QQ截圖20140609101521

6、重新添加

QQ截圖20140609101628

7、提示情況

QQ圖片20140609100724

QQ圖片20140609100928

QQ圖片20140609100815 

Html代碼:

<div>    <asp:FileUpload ID="fuImage" runat="server"  /></div><div>    <asp:Button ID="btnUpload" runat="server" Text="上傳" onclick="btnUpload_Click" /></div><div class="img_label">    <asp:Image ID="imgUploadImage1" Visible="false" runat="server" style="height:20px;width:20px" />    <asp:Button ID="button_ImgDelete1" runat="server" Text="刪除"         onclick="button_ImgDelete1_Click" Visible="false" />    <asp:Image ID="imgUploadImage2" Visible="false" runat="server" style="height:20px;width:20px"/>    <asp:Button ID="button_ImgDelete2" runat="server" Text="刪除"         onclick="button_ImgDelete2_Click" Visible="false" />    <asp:Image ID="imgUploadImage3" Visible="false" runat="server" style="height:20px;width:20px"/>    <asp:Button ID="button_ImgDelete3" runat="server" Text="刪除"         onclick="button_ImgDelete3_Click" Visible="false" /></div><div id="outerDiv" style="position:fixed;top:0;left:0;background:rgba(0,0,0,0.7);z-index:2;width:100%;height:100%;display:none;">    <div id="innerDiv" style="position:absolute;">        <img id="bigImg" style="border:5px solid #fff;" src="" />    </div></div>

Js代碼:

$(function () {   /*    *    針對上傳文件按鈕選擇完文件判斷是否選擇合法文件    */    $("input[type=file]").change(function () {        var fileName = $(this).val();        var suffixRegExp = //.jpg$|/.jpeg$|/.gif$|/.png$/i;        if (suffixRegExp.test(fileName)) {            $(this).next("img").attr("src", fileName);        }        else {            $(this).val("");            alert("允許上傳圖片格式:GIF|JPG|GIF|.");        }    });   /*    *    點擊圖片可以放大進行圖片預覽,再點擊恢復    *          這個功能是從往上看到的,最后理解了    */    $("img[id*=UploadImage]").click(function () {        $("#bigImg").attr("src", $(this).attr("src")).load(function () {            var windowW = $(window).width();            var windowH = $(window).height();            var realWidth = this.width;            var realHeight = this.height;            var imgWidth, imgHeight, scale = 0.8;            if (realHeight > windowH * scale) {                imgHeight = windowH * scale;                imgWidth = imgHeight / realHeight * realWidth;                if (imgWidth > windowW * scale) {                    imgWidth = windowW * scale;                }            }            else if (realWidth > windowW * scale) {                imgWidth = windowW * scale;                imgHeight = imgWidth / realWidth * realHeight;            }            else {                imgWidth = realWidth;                imgHeight = realHeight;            }            $(this).width(imgWidth);            $(this).height(imgHeight);            var w = (windowW - imgWidth) / 2;            var h = (windowH - imgHeight) / 2;            $("#innerDiv").CSS({ "top": h, "left": w });            $("#outerDiv").fadeIn("fast");        });    });    /*    *    再次點擊放大的圖層,使圖層消失    */    $("#outerDiv").click(function () {        $(this).fadeOut("fast");    })    /*    *    點擊上傳按鈕之前需要先判斷是否選擇了圖片,如果選擇的圖片數量大于3,提示不能繼續添加    */    $(btn_UploadImage).click(function () {        var count = 0;        $("div.img_label img[src*=Upload]").each(function () {            if ($(this).attr("src") != null) {                count++;            }        })        if (count == 3) {            alert("最多添加3張圖片,如想繼續添加,請先刪除圖片");            return false;        }    })}

C#代碼:

怎么說呢?最初想的是用jQuery實現刪除這塊的功能,刪除圖片的思路其實就是給img的src屬性賦空值,然后將其隱藏掉,但是不知道為什么當再次點擊【上傳】按鈕的時候,后臺又可以獲取到刪掉了的圖片src屬性的先前的值,這是讓我百思不得其解的地方。不過有時候問題總會有那么一個點,很簡單但是又很難讓人注意到,我本來就是在后臺靠判斷img的url有無值,然后再給其賦值的,那么我刪除的時候就可以直接給想刪除的img賦空值啊,何必用jQuery呢?不知道我說的大伙兒能不能懂,就是當時的一個想法,結果導致遲遲解決不了這個問題。

另外想說說關于.Net自定義控件,感覺真的蠻實用的,其實我們在寫的時候就把其當成普通控件就好,可以給其加一些控件屬性,而這些控件屬性其實就是這個自定義控件類的屬性(成員參數)了,當然,我們還可以把它純當作一個類,比如有數據庫交互的時候,我們就可以在其內部寫一個公開的Save方法,將控件內部的數據單獨保存起來,當整個頁面Save的時候,我們只要在適當的位置調用一個自定義控件的Save方法就OK了。

public partial class ImageUploadControl : System.Web.UI.UserControl    {        private string _relativePath;        private string _value = "$$##";        public string Value        {            get { return _value; }            set { _value = value; }        }        private BmsContextDataContext bcDataCXD = new BmsContextDataContext();        private bool flag = false;//點擊上傳按鈕時,如果給Image賦值,flag置true,說明此次上傳結束,上傳按鈕點擊一次只能給一個Image賦值        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                   Init();            }        }        public void Init()        {            if (!string.IsNullOrEmpty(_value))            {                string[] sep = { "$$##" };                string[] imgList = _value.Split(sep, StringSplitOptions.RemoveEmptyEntries);                foreach (string img in imgList)                {                    if (string.IsNullOrEmpty(imgUploadImage1.ImageUrl))                    {                        imgUploadImage1.ImageUrl = img;                        imgUploadImage1.Visible = true;                        button_ImgDelete1.Visible = true;                    }                    else if (string.IsNullOrEmpty(imgUploadImage2.ImageUrl))                    {                        imgUploadImage2.ImageUrl = img;                        imgUploadImage2.Visible = true;                        button_ImgDelete2.Visible = true;                    }                    else if (string.IsNullOrEmpty(imgUploadImage3.ImageUrl))                    {                        imgUploadImage3.ImageUrl = img;                        imgUploadImage3.Visible = true;                        button_ImgDelete3.Visible = true;                    }                }            }        }        public void Save()        {            _value = "$$##";            if (!string.IsNullOrEmpty(imgUploadImage1.ImageUrl))            {                _value = _value + imgUploadImage1.ImageUrl + "$$##";            }            if (!string.IsNullOrEmpty(imgUploadImage2.ImageUrl))            {                _value = _value + imgUploadImage2.ImageUrl + "$$##";            }            if (!string.IsNullOrEmpty(imgUploadImage3.ImageUrl))            {                _value = _value + imgUploadImage3.ImageUrl + "$$##";            }        }        protected void btnUpload_Click(object sender, EventArgs e)        {            //點擊上傳按鈕,將圖片加載到第一個未加載圖片的Image控件上            _relativePath = this.ImageUpload(fuImage);            _value = "$$##";//每次點擊上傳按鈕,都是對當前控件的狀態進行遍歷,重新進行組串            if (string.IsNullOrEmpty(imgUploadImage1.ImageUrl) && !flag )            {                //當Image中無url,同時flag為false                imgUploadImage1.ImageUrl = _relativePath;                _value = _value + _relativePath + "$$##";                imgUploadImage1.Visible = true;                button_ImgDelete1.Visible = true;                flag = true;            }            else            {                if (!string.IsNullOrEmpty(imgUploadImage1.ImageUrl))                {                    _value = _value + imgUploadImage1.ImageUrl + "$$##";                }            }            if (string.IsNullOrEmpty(imgUploadImage2.ImageUrl) && !flag)            {                imgUploadImage2.ImageUrl = _relativePath;                _value = _value + _relativePath + "$$##";                imgUploadImage2.Visible = true;                button_ImgDelete2.Visible = true;                flag = true;            }            else            {                //加if是原因,如果是因為flag為true而進入這個分支,則判斷Image的url是否為空                if (!string.IsNullOrEmpty(imgUploadImage2.ImageUrl))                {                    _value = _value + imgUploadImage2.ImageUrl + "$$##";                }            }            if (string.IsNullOrEmpty(imgUploadImage3.ImageUrl) && !flag)            {                imgUploadImage3.ImageUrl = _relativePath;                _value = _value + _relativePath + "$$##";                imgUploadImage3.Visible = true;                button_ImgDelete3.Visible = true;                flag = true;            }            else            {                if (!string.IsNullOrEmpty(imgUploadImage3.ImageUrl))                {                    _value = _value + imgUploadImage3.ImageUrl + "$$##";                }            }        }        private string ImageUpload(FileUpload fileUpload)        {            //如果FileUpload控件中有文件            if (fileUpload.HasFile)            {                string timeStamp = DateTime.Now.Ticks.ToString();//時間戳                string savePath = Server.MapPath("~/Upload/Images");//上傳路徑                //如果不存在此路徑,則創建一個新路徑                if (!Directory.Exists(savePath))                {                    Directory.CreateDirectory(savePath);                }                savePath = savePath + "//" + timeStamp + "_" + fileUpload.FileName;//重組文件名,加上對應的時間戳                fileUpload.SaveAs(savePath);//將圖片上傳到服務器                return "/Upload/Images/" + timeStamp + "_" + fileUpload.FileName; //返回圖片的名稱,相對路徑的            }            else            {                Utility.Show(this.Page, "未選擇圖片");            }            return null;        }        protected void button_ImgDelete1_Click(object sender, EventArgs e)        {            if (!string.IsNullOrEmpty(imgUploadImage2.ImageUrl))            {                imgUploadImage1.ImageUrl = imgUploadImage2.ImageUrl;            }            else            {                imgUploadImage1.ImageUrl = "";                imgUploadImage1.Visible = false;                button_ImgDelete1.Visible = false;            }            if (!string.IsNullOrEmpty(imgUploadImage3.ImageUrl))            {                imgUploadImage2.ImageUrl = imgUploadImage3.ImageUrl;                imgUploadImage3.ImageUrl = "";                imgUploadImage3.Visible = false;                button_ImgDelete3.Visible = false;            }            else            {                imgUploadImage2.ImageUrl = "";                imgUploadImage2.Visible = false;                button_ImgDelete2.Visible = false;            }        }        protected void button_ImgDelete2_Click(object sender, EventArgs e)        {            if (!string.IsNullOrEmpty(imgUploadImage3.ImageUrl))            {                imgUploadImage2.ImageUrl = imgUploadImage3.ImageUrl;                imgUploadImage3.ImageUrl = "";                imgUploadImage3.Visible = false;                button_ImgDelete3.Visible = false;            }            else            {                imgUploadImage2.ImageUrl = "";                imgUploadImage2.Visible = false;                button_ImgDelete2.Visible = false;            }        }        protected void button_ImgDelete3_Click(object sender, EventArgs e)        {            imgUploadImage3.ImageUrl = "";            imgUploadImage3.Visible = false;            button_ImgDelete3.Visible = false;        }    }  

總結一下這次的控件開發,其實在寫這種自定義控件的時候,實現某些功能,我們要盡量去琢磨用后臺來直接實現,而不是上來就用js,最后弄的代碼的功能實現極為分散,也容易將自己搞糊涂??傊褪且痪湓?,上手之前一定要先計劃好。

最后希望大家給予更多更好的建議,我會繼續做擴展。也希望能有朋友給加上好看的樣式,我們一起玩玩~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品亚洲视频在线观看| 亚洲视频综合网| 爽爽爽爽爽爽爽成人免费观看| 91成品人片a无限观看| 久久夜色精品国产欧美乱| 国产精品男女猛烈高潮激情| 亚洲激情成人网| 在线电影av不卡网址| 国产欧美一区二区三区久久人妖| 亚洲一区二区三区在线视频| 日韩女优人人人人射在线视频| 日本中文字幕不卡免费| 亚洲综合中文字幕在线观看| 国产亚洲激情视频在线| 91在线视频精品| 亚洲图中文字幕| 国产成人91久久精品| 北条麻妃在线一区二区| 国产精自产拍久久久久久蜜| 精品国内产的精品视频在线观看| 精品色蜜蜜精品视频在线观看| 亚洲欧美视频在线| 亚洲免费一级电影| 亚洲精品资源美女情侣酒店| 日韩精品中文字幕在线播放| 日韩国产欧美精品在线| 欧美亚洲第一页| 欧美成人免费在线视频| 精品色蜜蜜精品视频在线观看| 国产精品电影在线观看| 欧美精品国产精品日韩精品| 亚洲欧美资源在线| 9.1国产丝袜在线观看| 色小说视频一区| 欧美在线免费看| 久久久久久一区二区三区| 78m国产成人精品视频| 亚洲人精选亚洲人成在线| 日韩经典第一页| 国产偷国产偷亚洲清高网站| 欧美国产日韩二区| 亚洲福利视频二区| www日韩中文字幕在线看| 97视频在线观看免费| 国产精品成人免费电影| 久久综合电影一区| 一区二区三区黄色| 国产成人精品最新| 日韩av日韩在线观看| 91久久久久久久久久久| 欧美精品18videosex性欧美| 91香蕉电影院| 亚洲a中文字幕| 成年人精品视频| 国产精品狠色婷| 亚洲一区久久久| 亚洲精品成人久久久| 精品视频在线导航| 色综合久久天天综线观看| 精品国偷自产在线视频| 精品国产福利视频| 国语自产精品视频在线看| 日本一欧美一欧美一亚洲视频| 亚洲精品电影网在线观看| 欧美激情一区二区三区高清视频| 午夜精品久久久久久久白皮肤| 日韩精品在线播放| 欧美日韩国产在线播放| 欧美性猛交xxxxx免费看| 成人免费午夜电影| 午夜精品福利电影| 日韩中文字幕第一页| 国产精品视频网| 亚洲在线视频观看| 欧美成aaa人片免费看| 日韩在线高清视频| 欧美国产视频一区二区| 日韩欧美一区二区三区| 精品久久国产精品| 亚洲精品不卡在线| 国产精品视频导航| 亚洲第一精品福利| 欧美日韩加勒比精品一区| 欧美成人精品xxx| 国产成人精品视频| 欧美激情久久久久久| 亚洲欧洲国产伦综合| 国产精品男女猛烈高潮激情| 久久久久九九九九| 成人精品在线观看| 一区二区三区视频免费在线观看| 中文字幕自拍vr一区二区三区| 亚洲视频日韩精品| 亚洲精品有码在线| 欧美激情精品在线| 久久影院资源网| 午夜精品一区二区三区视频免费看| 少妇激情综合网| 亚洲第一区中文99精品| 岛国精品视频在线播放| 日韩精品视频免费在线观看| 亚洲国产精久久久久久| 久久综合久久美利坚合众国| 欧美激情区在线播放| 国产日韩在线精品av| 国产亚洲欧美日韩精品| 欧美在线激情网| 欧美洲成人男女午夜视频| 国产精品入口夜色视频大尺度| 69影院欧美专区视频| 成人国产精品一区二区| 亚洲视频网站在线观看| 国产欧美精品在线播放| 激情久久av一区av二区av三区| 日本成人在线视频网址| 色综合久久中文字幕综合网小说| 国产大片精品免费永久看nba| 国产精品露脸av在线| 91免费看片在线| 中文字幕亚洲欧美日韩2019| 在线精品国产成人综合| 欧美乱大交xxxxx另类电影| 在线播放国产一区中文字幕剧情欧美| 欧美高清第一页| 久久久久久网址| 福利精品视频在线| 97人洗澡人人免费公开视频碰碰碰| 欧美日韩国产精品一区二区不卡中文| 亚洲精品女av网站| 中文亚洲视频在线| 亚洲成人激情在线| 国产精品海角社区在线观看| 欧美国产日本高清在线| 国产日韩欧美一二三区| 亚洲欧美精品suv| 91精品国产777在线观看| 亚洲国产精彩中文乱码av| 午夜精品一区二区三区av| 欧美人与物videos| 亚洲三级黄色在线观看| 中文字幕久热精品在线视频| 91在线播放国产| 日韩欧美在线视频日韩欧美在线视频| 91在线精品播放| 国产欧美精品日韩| 神马久久桃色视频| 亚洲精品久久久久中文字幕二区| 日韩欧美在线视频观看| 奇米4444一区二区三区| 中文字幕日韩欧美在线视频| 国产精品久久久一区| 91精品在线影院| 亚洲激情小视频| 亚洲精品资源在线| 欧美激情xxxxx| 欧洲日韩成人av| 精品福利在线视频| 91精品在线观| 1769国内精品视频在线播放| 91国产精品91| 欧美一二三视频| 亚洲色图13p| 久久久国产精品免费| 久久亚洲春色中文字幕|