单击按钮更改图像 Url
Change Image Url at button click
在我的 asp.net 页面中,我有图像控件,其中 myimage.png 将在页面加载时显示。要求如下,
使用文件上传控件浏览图像并单击上传按钮,需要在图像控件中显示即时预览。浏览图片后按下上传按钮时,现有的"myimage.png"将被删除,新图片将保存到同名的服务器路径中,需要在图片控件中显示预览。
问题是保存图像后,图像控件没有立即显示新图像。
要查看图像页面需要重新加载。代码如下,
在 aspx 页面中,
<asp:Image ID="imgLogo" style="margin-left: -299px;" ImageUrl="~/images/myimage.png" runat="server" />
代码如下,
protected void btnUpload_Click(object sender, EventArgs e)
{
string filePath = FileUpload1.PostedFile.FileName;
File.Delete(Server.MapPath(@"~\images\myimage.png"));
FileUpload1.SaveAs(Server.MapPath(@"~\images\myimage.png"));
imgLogo.ImageUrl = Server.MapPath(@"~\images\myimage.png");
}
此致
必须重新加载页面的原因是 ASP.NET 代码在服务器上执行。所以每次你,例如,点击里面有服务器端代码的按钮,请求被发送到服务器,服务器执行你的代码和 returns 一个正确的响应。基本上:必须重新加载一些东西。不过,它不一定是整个页面。您可以使用 AJAX 扩展程序强制浏览器仅重新加载特定页面,例如 Script Manager 和 Update Panel.
示例(aspx 页面):
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Click the button."></asp:Label>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Hello World" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
OnClick 事件:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Hello world!";
}
此外,您可以使用 UpdatePanel 的 Update()
方法强制面板更新其内容。
这看起来像是浏览器缓存问题。
url与更改图像文件之前完全相同,因此缓存将使用原来命名的文件(在其缓存中)显示。
您可以通过向 url 添加一些额外的(但未使用)来克服这个障碍:
protected void btnUpload_Click(object sender, EventArgs e)
{
// Do your upload stuff here...
imgLogo.ImageUrl = "~/images/myimage.png?" + DateTime.Now;
}
在我的 asp.net 页面中,我有图像控件,其中 myimage.png 将在页面加载时显示。要求如下, 使用文件上传控件浏览图像并单击上传按钮,需要在图像控件中显示即时预览。浏览图片后按下上传按钮时,现有的"myimage.png"将被删除,新图片将保存到同名的服务器路径中,需要在图片控件中显示预览。
问题是保存图像后,图像控件没有立即显示新图像。 要查看图像页面需要重新加载。代码如下, 在 aspx 页面中,
<asp:Image ID="imgLogo" style="margin-left: -299px;" ImageUrl="~/images/myimage.png" runat="server" />
代码如下,
protected void btnUpload_Click(object sender, EventArgs e)
{
string filePath = FileUpload1.PostedFile.FileName;
File.Delete(Server.MapPath(@"~\images\myimage.png"));
FileUpload1.SaveAs(Server.MapPath(@"~\images\myimage.png"));
imgLogo.ImageUrl = Server.MapPath(@"~\images\myimage.png");
}
此致
必须重新加载页面的原因是 ASP.NET 代码在服务器上执行。所以每次你,例如,点击里面有服务器端代码的按钮,请求被发送到服务器,服务器执行你的代码和 returns 一个正确的响应。基本上:必须重新加载一些东西。不过,它不一定是整个页面。您可以使用 AJAX 扩展程序强制浏览器仅重新加载特定页面,例如 Script Manager 和 Update Panel.
示例(aspx 页面):
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Click the button."></asp:Label>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Hello World" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
OnClick 事件:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Hello world!";
}
此外,您可以使用 UpdatePanel 的 Update()
方法强制面板更新其内容。
这看起来像是浏览器缓存问题。
url与更改图像文件之前完全相同,因此缓存将使用原来命名的文件(在其缓存中)显示。
您可以通过向 url 添加一些额外的(但未使用)来克服这个障碍:
protected void btnUpload_Click(object sender, EventArgs e)
{
// Do your upload stuff here...
imgLogo.ImageUrl = "~/images/myimage.png?" + DateTime.Now;
}