我在更新面板中有一个图像控件,在页面加载中我正在设置其URL。
在page_load背后的代码
string url = "example.com";
Image1.ImageUrl = url;
在aspx中的updatepanel内部
<asp:Image ID="Image1" runat="server" CssClass="image" />
我在更新面板内部还有几个提交按钮,我正在按钮点击更新一些texbox和标签。
但是这会导致整个页面刷新。 (滚动条上升。)
如果将图像移到更新面板之外,则不会发生这种情况。 问题是,如果我删除updatepanel之外的图像,布局根本不起作用。 谁能帮我这个?感谢。
更新
我意识到这只发生在Chrome中。有没有人有想法?
更新2 在该页面上,我通过从updatepanel中删除img解决了该问题。让布局工作真是太棒了,但它确实有效。
但是我有另一个页面,当用户点击更多加载时,我在更新面板中添加新的imgs。同样的交易,显然我这次不能将图像移出更新面板。这是代码。
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<!--Recent Uploads-->
<div class="uploads">
<h2>Uploads</h2>
<asp:UpdatePanel ID="RecentUpload" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="loaduploads"/>
</Triggers>
<ContentTemplate>
<asp:Button CssClass="uploadButton" ID="loaduploads" runat="server" Text="Load More" OnClick="loaduploads_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
代码隐藏(上传索引是会话变量)
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
加载时发生。这是代码。
<%@ 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;
}
}
}
答案 0 :(得分:2)
您应该使用更新面板的异步回发触发器 这是一个例子:
<asp:AsyncPostBackTrigger ControlID="" EventName=""/>
其中'controlID'是元素的id,可以导致回发,'eventname'是由定义的控件触发的特定事件导致回发
答案 1 :(得分:1)
添加另一个更新面板并将您的图片标记放入此更新面板,然后将属性“updatemode”设置为“always”。
试试这个,它肯定会解决你的问题。如果不让我知道。
答案 2 :(得分:1)
在我看来,
您应该尝试向正文添加控件,而不是更新
ContentTemplate
的{{1}},即在ContentTemplate中创建UpdatePanel
控件并添加其中的所有内容并更新Panel
中的所有内容{1}}不是Panel
。
检查显示的逻辑和aspx语法,以便将控件添加到ContentTemplate
Panel
<强> ASPX 强>
UpdatePanel > ContentTemplate
代码背后
<asp:UpdatePanel ID="RecentUpload" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="loaduploads"/>
</Triggers>
<ContentTemplate>
<asp:Panel ID="pnlMyDynamicContent" runat="server">
<asp:Button CssClass="uploadButton" ID="loaduploads" runat="server" Text="Load More" OnClick="loaduploads_Click" />
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>