我有一个ASP.NET网站,用户可以在其中打开ImageButton Web控件中的图片。然后,他们可以四处点击并获取两次点击之间的距离。随着用户不断单击,距离被添加到一个int变量total中。然后,可以通过按下asp.net按钮将此总和设置为Excel电子表格中活动单元格的值。
ImageButton的OnClientClick事件由JavaScript文件中的函数处理,并且变量分别对应于距离和总计。我选择在javascript中执行此操作,因为它很容易避免回发。设置ImageButton URL并将总数传递给Excel的Button OnClick事件在C#代码文件中处理。由于C#中的OnClick仅适用于回发,因此每次通过javascript函数进行更新时,总数都会传递给asp:HiddenField
在预设ImageButton URL且没有任何隐藏字段的情况下,javascript函数本身可以很好地工作(不进行回发)。但是,一旦我添加了C#代码并将javascript变量传递给它们相应的隐藏字段,就会发生回发,并且数据仍然丢失。
即使执行单独的OnClick事件,我如何确保javascript函数也无需回发即可执行?
这是JavaScript:
var pos1x = 0, pos1y = 0;
var pos2x = 0, pos2y = 0;
var distx = 0, disty = 0;
var redistx = 0, redisty = 0, newdist = 0;
var runtotal = 0;
var numClick = 0;
function Pic_Click() {
numClick++;
document.getElementById("labelcount").innerText = "Count: " + numClick;
var rem = numClick % 2;
if (rem == 1) {
pos1x = event.pageX;
pos1y = event.pageY;
}
else {
pos2x = event.pageX;
pos2y = event.pageY;
distx = Math.abs(pos2x - pos1x);
disty = Math.abs(pos2y - pos1y);
redistx = Math.ceil(distx / 50);
redisty = Math.ceil(disty / 50);
newdist = Math.ceil(Math.sqrt(redistx * redistx + redisty * redisty));
document.getElementById("labelrun").innerText = "Distance: " + newdist;
total += newdist;
document.getElementById("labeltotal").innerText = "Total: " + total;
}
return false;
}
每次更新总计时,我都会通过在 total + = newdist之后添加 document.getElementById('hiddenfield')。value = total; 来将其值传递给HiddenField。 / strong>。
使用C#方法打开图片:
protected void UploadIt(object sender, EventArgs e)
{
//
filename = Path.GetFileName(FileUpload1.FileName);
fullpath = Path.Combine("~/Files/" + filename);
ext = Path.GetExtension(fullpath);
imgholder.ImageUrl = fullpath;
}
Web控件在.aspx文件中创建:
<asp:ImageButton ID="imgholder" runat="server" OnClientClick="Pic_Click(); return false;" />
<asp:Button ID="Up" runat="server" Text="Upload" OnClick="UploadIt"/>
<asp:FileUpload ID="FileUpload1" runat="server" />