首页 新闻 会员 周边 捐助

webform 如何动态刷新DIV?

0
悬赏园豆:5 [已解决问题] 解决于 2018-05-08 15:57

webform页面,实现的是一个图片搜索功能。

点击搜索按钮后,通过对div.innerhtml赋值,将搜索到的图片展现在页面上指定的

DIV中,目前的问题是,图片有很多,一次性搜索完毕后再进行加载的话就太慢了,

可以实现边搜索边加载么?

问题补充:
    protected void ButtonSearch_Click(object sender, EventArgs e)
        {
            string currentURL = Request.Form["TextBoxURL"];
            if (string.IsNullOrEmpty(currentURL))
                return;
           
            List<string> urlList = new List<string>(FormHelper.GetUrlListByUrl(currentURL).Split('\n'));
            urlList.Add(currentURL);

            Task task = new Task(() =>
            {
                foreach (string url in urlList)
                {
                    Imgs.InnerHtml += FormHelper.GetHtmlByUrl(url);
                }
            });
            task.Start();
           
        }
View Code

这样为何不行?

Subject15的主页 Subject15 | 初学一级 | 园豆:19
提问于:2016-12-23 10:18
< >
分享
最佳答案
0

瀑布流 的思路也是分页。

提供一思路 

搜索的时候不知道 FormHelper.GetUrlListByUrl(currentURL)这个是自己数据库搜索吗还是第3方 能指定张数吗?(可以我在回答)

代码还有一个问题 Imgs.InnerHtml += FormHelper.GetHtmlByUrl(url);

先拼接好在一次行赋值给 Imgs.InnerHtml  。还有new List<string>(FormHelper.GetUrlListByUrl(currentURL).Split('\n'));为什么不用任务呢  并行 不想写线程 就用 Parallel

收获园豆:5
s_p | 初学一级 |园豆:140 | 2016-12-23 11:39

1.  FormHelper.GetUrlListByUrl(currentURL)

    这个是自己写的方法,不是数据库搜索,没指定张数

       public static string GetUrlListByUrl(string url)
        {
            StringBuilder sb = new StringBuilder();
            //抓取网页
            WebRequest request = WebRequest.Create(url);
            WebResponse response = request.GetResponse();
            //读取文件流
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")); //reader.ReadToEnd() 表示取得网页的源码
            //FileStream fs = new FileStream("~/baidu.html", FileMode.OpenOrCreate);
            string strhtml = reader.ReadToEnd();
            string rxg = '"' + "http.*?" + '"';
            MatchCollection mc = Regex.Matches(strhtml, rxg);
            for (int i = 0; i < mc.Count; i++)
            {
                sb.AppendLine(mc[i].ToString().Trim('"'));
            }
            return sb.ToString();
        }
View Code

2. 也可以一次性赋值给Imgs.InnerHtml,但如果内容太多的话,那等待时间不就太长了吗

3. GetUrlListByUrl这边不耗时,主要是下面这个耗时,所以用了多线程 

 Task task = new Task(() =>
            {
                foreach (string url in urlList)
                {
                    Imgs.InnerHtml += FormHelper.GetHtmlByUrl(url);
                    UpdatePanel1.Update();
                }
            });
            task.Start();
View Code
Subject15 | 园豆:19 (初学一级) | 2016-12-23 11:49
其他回答(4)
0

边搜索边加载?不理解这需求。。。搜索结果分页,图片可以采用延迟加载。。。

麦籽 | 园豆:102 (初学一级) | 2016-12-23 10:52

就是后台搜索用的是多线程,搜索图片是在一直进行的,想要实现的效果就是,

搜索出一些图片就开始显示在页面上,然后图片不断增加,直到搜索完成

支持(0) 反对(0) Subject15 | 园豆:19 (初学一级) | 2016-12-23 10:56
0

瀑布流或者webform自带的javascript局部刷新工具

临冰听雪丶 | 园豆:175 (初学一级) | 2016-12-23 11:23
0

这是个伪命题;你这服务器的生成的ajax结果DIV,里面仅仅是一个比如Image的link,这些link浏览器原本就是线程池去解决的,快慢只取决于image的source服务器。但比如你想让浏览器不这么干,那么需要对source进行控制——因此客户端只需要控制dom。再假设你的这些image本身是js code控制的,那么只需要修改这个控制即可。

花飘水流兮 | 园豆:13615 (专家六级) | 2016-12-23 12:31
0

as ............

Subject15 | 园豆:19 (初学一级) | 2018-05-08 15:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册