【发布时间】:2021-07-25 09:20:14
【问题描述】:
环境:Microsoft Visual Studio 2019 社区,使用 VB.NET 的 ASP.NET v4.8 Web 应用程序项目
问题:我有一个 asp 图像按钮,用于通过每次单击时更改图像来指示状态(红色-琥珀色-绿色-红色)。这是使用 javascript 完成的:
btn.src = newImage;
这很好用。 imageurl 是在 html 中使用 src 访问的,但图像最初是通过设置 imagebutton.imageurl 在数据绑定后面的代码中设置的:
btn.ImageUrl = initialImage
在回发(保存)时,我想通过查看当前的 imageurl 来查找状态。
Dim btn As ImageButton = CType(mainGrid.Rows(i).FindControl("btn"), ImageButton))
someval = btn.imageurl
问题在于 imageurl 显示的是最初设置的值,而不是更改后的值。这种奇怪似乎指向我代码中某处的错误,因为很明显后面的保存代码中的 imagebutton 变量对后面的数据绑定代码中的 imagebutton 变量一无所知。
有人可以确认回发中的 imageurl 实际上应该与 html 中更改的 src 匹配吗?
编辑:我应该说我不想在他们每次单击图像按钮时都使用服务器端处理。我可以使用命令参数来完成这项工作,但每次单击时都会导致数据库写入。每行有十几个按钮,所以我认为这在生产中会很慢。
【问题讨论】:
-
图像控件不像文本框那样具有自动视图状态。因此,您可以在客户端 js 中设置/更改一个文本框 - 并且在回发时该值将持续存在并且可以被后面的代码看到 + 使用。对于图像控制?不幸的是,虽然您可以在客户端 js 代码中设置它 - 该设置在回发时不会持续存在。这意味着/建议您必须将更改的值保存在数组中,或者在网格中设置一些额外的列来保存该值。或者将整个网格放在一个更新的面板中,然后简单地使用后面的代码进行此设置。
-
好的,阿尔伯特我明白了。我会尝试更新面板的方法。感谢您的帮助。
-
要么,有一个隐藏的列,并更改 src 和那个额外的列。使用更新面板,您不会得到完整的回发,而且性能+响应通常非常好。但是,如果你全力以赴 - 然后当你更改图像的 src 时,然后将其保存到隐藏字段中 - 但是由于你使用 src 作为信息的“标志”,那么你最好只更改一些值(例如 1 ,2,3) 或其他任何内容,并更改图像的 src - 换句话说,不要使用我们的非持久 URL 作为确定所做选择的手段。所以你仍然可以这样做 - 或更新面板
-
也是一个很好的建议 - 再次感谢。我查看了更新面板的方法,整个页面是一个带有数十个这些变化指标的网格视图,所以我认为这条路线与将整个内容发回几乎没有什么不同。我最终使用 jquery.post 在每次更改时对数据库进行异步 ajax 更新,效果很好。