jjzjj

关于 c#:image in updatepanel 导致整个页面刷新

codeneng 2023-03-28 原文

image in updatepanel causes whole page refresh

我在更新面板中有一个图像控件,在页面加载中我正在设置它的 url。

page_load 中的代码

1
2
string url ="example.com";
Image1.ImageUrl = url;

在 aspx 中的更新面板内

1
 

我在更新面板中也有几个提交按钮,我正在更新按钮点击时的一些 texboxes 和标签。

但是这会导致整个页面刷新。 (滚动条上升。)

如果将图像移到更新面板之外,则不会发生这种情况。
问题是如果我删除更新面板之外的图像,布局根本不起作用。
谁能帮我这个?谢谢。

更新

我意识到这只发生在 Chrome 中。有人有想法吗?

更新 2
在那个页面上,我通过从更新面板中删除 img 解决了这个问题。让布局工作简直是地狱,但它奏效了。

但是我有另一个页面,当用户单击加载更多时,我将在更新面板中添加新的 imgs。同样的交易,显然这次我不能将图像移出更新面板。这是代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
    </asp:ScriptManager>

        <!--Recent Uploads-->
       
            Uploads
           
                <Triggers>
                   
                </Triggers>
                <ContentTemplate>
                   
                </ContentTemplate>
            </asp:UpdatePanel>

后面的代码(上传索引是一个会话变量)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
upload_index += 5;
        for (int i = 0; i < upload_index; i++)
        {
            try
            {
                SSImage img = images[i];
                HyperLink imglink = new HyperLink();
                imglink.NavigateUrl ="/Image.aspx?id=" + img.id;
                imglink.ImageUrl ="/ShowImage.ashx?imgid=" + img.id;
                imglink.ToolTip = img.title;
                imglink.CssClass ="imgupload";
                Control contentpanel = RecentUpload.ContentTemplateContainer;
                contentpanel.Controls.AddAt(contentpanel.Controls.Count - 2, imglink);
            }
            catch (ArgumentOutOfRangeException)
            {
                loaduploads.Visible = false;
                break;
            }
        }

更新 3

问题不会发生在静态图像上,而是在我尝试从 showimage.ashx 加载时发生。这是代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<%@ WebHandler Language="C#" Class="ShowImage" %>

using System;
using System.Web;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public class ShowImage : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        SqlDataReader rdr = null;
        SqlConnection conn = new SqlConnection();
        SqlCommand cmd = new SqlCommand();

        try
        {
            string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            conn = new SqlConnection(connStr);

            cmd = new SqlCommand("SELECT Image_data FROM [Image_table] WHERE Image_id =" + context.Request.QueryString["imgID"], conn);
            conn.Open();
            Object result = cmd.ExecuteScalar();
            //if nothing found throw exception
            if (result == null)
            {
                throw new Exception();
            }
            rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                context.Response.ContentType ="image/jpg";
                context.Response.BinaryWrite((byte[])rdr["Image_data"]);
            }

            if (rdr != null)
                rdr.Close();
        }
        catch
        {

        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

  • 您是否将 Triggers 放入更新面板?
  • @zey 是的,我有 asyncpostbacktrigger
  • 你可以发布你的代码吗?
  • @zey 整件事?
  • UpdatePanelasyncpostbacktrigger :)
  • @zey我已经更新了问题并输入了代码。该代码在 Firefox 和 ie9 中运行良好(没有用 10 测试)。但似乎在 chrome 中进行了完整的回发。
  • 我觉得我以前见过这个问题......几个想法:1)标记生成的HTML是有效的吗? 2) 浏览器/服务器之间的 HTTP 对话是什么样的(在 Chrome 开发工具中查看)?也许那里有一个线索。 3) 我还将附加脚本调试器并查找任何非致命错误。
  • @TimMedora 在网络选项卡中,当我单击按钮时,有一个帖子和一堆图像。发起者是 ScriptResource.axd
  • @TimMedora 在脚本控制台上有一些关于字体的警告,但那是在所有页面上,除此之外什么都没有
  • 如果你通过validator.w3.org 运行整个页面源代码呢?有时结构性错误会使浏览器感到困惑(并且浏览器以不同的方式处理错误)。
  • @TimMedora 我在验证器上有两个错误 An img element must have an alt attribute. 没什么重要的。
  • 明白了……你能用精简版的页面重现问题吗? (只是使其与其他所有被删除的东西一起工作所需的最少代码)。
  • @TimMedora 我会尽力回复你。
  • @TimMedora 是的,我已经剥离了所有内容。只是一个加载按钮,然后单击按钮,我将图像加载到更新面板中。不适用于铬。
  • 我没有想法......如果你能够压缩项目的独立版本,我会下载并在我的机器上试用。
  • @TimMedora 我创建了一个新项目来再次测试它。现在我无法重新创建它。我会看得更深。
  • @TimMedora 我更新了问题,请看一下。基本上问题不会发生在静态图像上,而是发生在我从数据库加载的图像上,尤其是从 showimage.ashx 加载的图像上。
  • 对不起,我刚刚看到你的最新更新。我使用 UpdatePanel 内的 ASHX 提供的图像创建了一个测试设置,但我无法让它在 IE10 或 Chrome 26 中中断。我尝试提供有效图像并从处理程序中抛出异常。
  • 通过静态图像它可以工作..这是否意味着按钮中的逻辑在更改为 imglink.ImageUrl ="ImagesMyImage.png"; 时单击为 imglink.ImageUrl ="ShowImage.ashx?imgid=" + img.id; 它可以工作? (您尝试将控件动态添加到内容模板的部分)
  • @HarshBaid 是的,这就是我的意思。
  • @TimMedora 感谢您提供帮助。我很感激。我现在有点放弃了,因为我正在为班级项目创建一个网站,并且我已经提交了它。我真的不知道它有什么问题。如果您有时间并想查看源代码,该网站位于 github.com/btevfik/Fuddle。您可以查看 UserProfile.aspx,这就是问题发生的地方。


您应该使用更新面板的异步回发触发器
这是一个例子:

1
 

其中 'controlID' 是可以导致回发的元素的 ID,而 'eventname' 是由定义的控件触发以导致回发的特定事件


在我看来,

You should try to add controls to the body instead of updating the ContentTemplate of the UpdatePanel i.e. Create a Panel control in ContentTemplate and add everything in that and update anything in that Panel not the ContentTemplate.

检查逻辑和 aspx 语法,显示将控件添加到 UpdatePanel > ContentTemplate

中包含的 Panel

ASPX

1
2
3
4
5
6
7
8
9
        <Triggers>
           
        </Triggers>
        <ContentTemplate>
           
                 
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>

代码背后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    ad_index += 5;
    for (int i = 0; i < upload_index; i++)
    {
        try
        {
            SSImage img = images[i];
            HyperLink imglink = new HyperLink();
            imglink.NavigateUrl ="/Image.aspx?id=" + img.id;
            imglink.ImageUrl ="/ShowImage.ashx?imgid=" + img.id;
            imglink.ToolTip = img.title;
            imglink.CssClass ="imgupload";

            // Commented old code
            //Control contentpanel = RecentUpload.ContentTemplateContainer;
            //contentpanel.Controls.AddAt(contentpanel.Controls.Count - 2, imglink);

            //Add controls to Panel instead of updating the ContentTemplate itself
            pnlMyDynamicContent.Controls.AddAt(pnlMyDynamicContent.Controls.Count - 2, imglink);
        }
        catch (ArgumentOutOfRangeException)
        {
            loaduploads.Visible = false;
            break;
        }
    }

  • 谢谢回复。我最初实际上已经这样做了,但结果相同。


添加另一个更新面板并将您的图像标签放入此更新面板,然后将属性"updatemode"设置为"always"。

试试这个,它肯定会解决你的问题。如果不让我知道。

有关关于 c#:image in updatepanel 导致整个页面刷新的更多相关文章

  1. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  2. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  3. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  4. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  5. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  6. ruby - 从另一个私有(private)方法中使用 self.xxx() 调用私有(private)方法 xxx,导致错误 "private method ` xxx' called” - 2

    我正在尝试获得良好的Ruby编码风格。为防止意外调用具有相同名称的局部变量,我总是在适当的地方使用self.。但是现在我偶然发现了这个:classMyClass上面的代码导致错误privatemethodsanitize_namecalled但是当删除self.并仅使用sanitize_name时,它会起作用。这是为什么? 最佳答案 发生这种情况是因为无法使用显式接收器调用私有(private)方法,并且说self.sanitize_name是显式指定应该接收sanitize_name的对象(self),而不是依赖于隐式接收器(也是

  7. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  8. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

    我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

  9. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  10. ruby - 为什么 return 关键字会导致我的 'if block' 出现问题? - 2

    下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson

随机推荐