我通过以下jquery代码设置图像控件的值:
$('.image').click(function () {
var imgPath = $(this).attr('src');
var imgName = imgPath.substring(0, imgPath.length - 4);
var imgAlt = $(this).attr('alt');
$('#<%= detailedImage.ClientID %>').
attr('src', imgName + '-large.jpg').
attr('alt', imgAlt);
图片在浏览器中完美显示。但是我无法访问它的src
属性:
string imgName = detailedImage.Src;
imgName
始终为空字符串。有什么建议吗?
答案 0 :(得分:2)
我确信有很多方法可以解决这个问题,这很大程度上取决于页面中其他地方的因素以及有助于整体功能和用户体验的应用程序。但就建议而言,如何:
不是试图保持图像控件中所选图像的状态,而是将其分离到不同的控件中。使用标准的img
HTML元素在客户端向用户显示图像,并将其保留为仅用户体验问题。不要将它用作表单的一部分。
然后创建一个单独的控件(隐藏字段,已设置为不显示样式的文本框等),并将图像文件的路径设置为JavaScript中该控件的值。像这样:
$('.image').click(function () {
var imgPath = $(this).attr('src');
var imgName = imgPath.substring(0, imgPath.length - 4);
var imgAlt = $(this).attr('alt');
$('#showImage').attr('src', imgName + '-large.jpg').attr('alt', imgAlt);
$('#<%= imagePath.ClientID %>').val(imgName + '-large.jpg');
});
请注意,src
和alt
是在标准img
标记上设置的(在这种情况下标识为showImage
)和服务器端代码的值关心的是在另一个控件上完全设置(在这种情况下使用服务器端标识imagePath
)。
我现在没有办法对此进行测试,但这是一个建议。它可能无法正常工作,如果是这种情况让我知道,我可以修改/删除这个答案。但似乎有意义的是,TextBox
ASP.NET控件之类的内容意味着在客户端修改其值。 (事实上,在这种情况下,你可能会有更好的运气,TextBox
样式不会显示,而不是隐藏字段。)
答案 1 :(得分:2)
即使src
位于img
内,更改img
的{{1}}也不会将<form>
提交给服务器。您需要在表单中提交的内容中设置新的src
,即隐藏字段。试试这个:
src
如果您现在在标记中有这样的内容:
$('.image').click(function () {
var imgPath = $(this).attr('src');
var imgName = imgPath.substring(0, imgPath.length - 4);
var imgAlt = $(this).attr('alt');
var src = imgName + '-large.jpg';
$('#<%= detailedImage.ClientID %>').
attr('src', src).
attr('alt', imgAlt);
$('#<%= hiddenInput.ClientID %>').val(src);
});
您应该能够检索<input type="hidden" id="ImageSource" runat="server" />
服务器端。