ImageUrl在使用动态控件回发时丢失,但文本框保持其值

本文关键字:文本 动态控件 ImageUrl | 更新日期: 2023-09-27 17:47:49

我有一个按钮,可以通过程序添加已经定义的用户控件。我正在重建Postback上的每个控件,它们显示得很好。如果我把文本放在文本框中,它会显示得很好,但我的图像正在丢失它们的url。知道我为什么或如何解决这个问题吗?

我试着添加AJAX更新面板,看看这是否有帮助,但没有。

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

---更新好吧,我对我的问题有了更多的见解——一些解决方案,但还有一个问题。

图像丢失url的原因是因为它们是而不是ASP.Net图像-ASP.Net在回发时会记住它们的值-然而,通过javascript更改的主图像丢失了它的值-我非常确定这是因为使用javascript更改它,在回发后它会恢复到以前的值。。。所以对于一个解决方案,我会尝试将其填充到一个隐藏值中,然后在回发时使用该值来定义图像的ImageUrl。。。

ImageUrl在使用动态控件回发时丢失,但文本框保持其值

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

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

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

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

简而言之,服务器端表单控件值在回发后可用。如果您有普通的html表单字段,也可以使用相同的方法(https://www.w3schools.com/html/html_form_elements.asp),您将使用Request.Form集合获取它的值。

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