将多个添加到一个表单时,Asp.Net用户控件无法正常工作

我创建了一个用户控件,允许上传图像然后裁剪,但是当我在一个表单上有几个这样的控件时,只有最后添加的图像才能正常工作。 问题是函数storeCoords,对X,Y,W和H隐藏字段没有影响,因此当移动裁剪“橡皮筋”时,这些值不会改变。 随着最终控件的添加,随着“橡皮筋”的移动,隐藏的字段会更新,然后一切都按预期工作。 为什么当我在一个页面上有几个这样的控件时,只有最后一个javascript按预期工作。

    $(window).on('load', function () { var elem = $('#'), boxWidth = elem.width(), boxHeight = elem.height(); elem.Jcrop({ onSelect: storeCoords, boxWidth: boxWidth, boxHeight: boxHeight }); $('#').click ( function () { var cropImg = $('.jcrop-holder img'); $('#').val(cropImg.width()); $('#').val(cropImg.height()); } ); }); function storeCoords(c) { $('#').val(cx); $('#').val(cy); $('#').val(cw); $('#').val(ch); }  


我发现这个控件几乎没有问题:

1。

  var elem = $('#<%= CropImage.ClientID %>'), boxWidth = elem.width(), boxHeight = elem.height(); 

这些行不应该跟一个分号“;” 而不是逗号? 但也许是一个错字。

2。

因为您在页面的几个位置使用此控件,所以您需要处理任何JavaScript代码的“重复”外观:

例如,每次将控件添加到页面时,都会出现以下标记。

  

然而,这对function没有任何坏处(我认为?!),但是下面的函数肯定会这样做,因为JavaScript将具有相同参数的相同函数的更多副本。 考虑哪一个?

 function storeCoords(c) { $('#<%= X.ClientID %>').val(cx); $('#<%= Y.ClientID %>').val(cy); $('#<%= W.ClientID %>').val(cw); $('#<%= H.ClientID %>').val(ch); } 

快速解决方案是:

  elem.Jcrop({ onSelect: storeCoords<%= CropImage.ClientID %>, boxWidth: boxWidth, boxHeight: boxHeight }); 

 function storeCoords<%= CropImage.ClientID %>(c) { ... } 

通过这种方式,您将拥有唯一的函数名称。

但是,ASP .Net具有处理使用JavaScript的用户控件的机制。 请参见ClientScriptManager