ImageUrl在回发时丢失了动态控件,但文本框保留了它们的值

时间:2008-10-19 19:19:14

标签: c# asp.net

我有一个按钮,可以编程添加已经定义的用户控件。我正在重建Postback上的每个控件,它们显示正常。如果我在文本框中放置文本它显示正常,但我的图像丢失了他们的网址。知道为什么或如何解决这个问题?

我尝试添加AJAX updatepanel以查看是否有帮助,但事实并非如此。

进一步解释 - 我有一个按钮,点击后设置图像的网址 - 我也把这个值放在文本框中,只是为了看看是否发生了同样的事情 - 在回发后,我的文本框仍然有值,但是图像没有 - 我的所有其他ASP.Net图像都丢失了它们的图像,它们在控件上定义(即:ImageUrl)

---更新 好的,我已经找到了更多关于我的问题的见解 - 一些解决方案,但仍然存在一个问题。

图片丢失网址的原因是因为它们不是ASP.Net图像 - ASP.Net会记住在回发时重新创建的值 - 但是通过javascript更改的主图像会失去其价值 - 我我非常肯定这是因为使用javascript更改它,在回发后它恢复到以前的值...所以对于一个解决方案我会尝试将其填入隐藏值,然后在回发上使用该值来定义图像的ImageUrl ......

3 个答案:

答案 0 :(得分:1)

你是对的<img>是一个html控件,而<asp:Image>是一个服务器控件。只要服务器控件启用了视图状态,它们就会在回发期间保留其值。

答案 1 :(得分:1)

你是正确的,通过JavaScript更改图像的URL不会在回发期间返回它,因为这不是表单值。因此,如果您不将其保存到表单字段(例如您建议的隐藏字段),它将永远丢失。

答案 2 :(得分:0)

图片不是表单字段。这就是为什么它的价值永远不会发回服务器的原因。

你的asp:图像控件在回发期间保留值的原因是因为它们存储在viewstate中(存储在隐藏字段中)。当您单击按钮时,此视图状态将发布回服务器,并且asp.net会在页面生命周期的早期事件中从viewstate设置图像控件的ImageUrl属性。

简而言之,服务器端表单控件值在回发后可用。同样的方法,如果你有正常的html表单字段(https://www.w3schools.com/html/html_form_elements.asp),你将使用Request.Form集合获得它的价值。

您正在使用javascript设置您的Image src(显然不在原始视图状态中),这就是为什么您没有在回发中获得它的价值。您应该使用隐藏字段使用javascript设置值,这可以在回发后使用。