【发布时间】:2025-12-17 14:00:02
【问题描述】:
我有一个 asp.net 网站来管理项目。我意识到,当我非常快地点击下一个项目时,它通常会用第一个项目的数据覆盖所有下一个项目。我在进行下一个项目之前调用了一个保存方法。我还使用会话变量作为项目的 ID。
编辑:
看起来服务器堆叠了保存方法和 id,但将第一个项目的值保留在控件中
我说的对吗?
这是调用服务器方法以获取 id 并将其设置在隐藏字段中的 ajax:
function NextClick() {
var tabvalue = $("#<%=TabsToFocus.ClientId%>").val();
$.ajax(
{
type: "POST",
url: "Projet.aspx/NextProj",
data: "{tab:'" + tabvalue + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(d) {
if (d.d != "False") {
$("#<%=hid_selProjetID.ClientID%>").val(d.d);
var btn = $("#<%=btnClickLstProjet.ClientID%>");
fillHidden();
btn.click();
}
}
});
}
而btn.click()在服务端调用这个方法来保存
Private Sub Button1_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnClickLstProjet.ServerClick
If HttpContext.Current.Session.Item("isUser") IsNot Nothing AndAlso HttpContext.Current.Session.Item("isUser") = True Then
If HttpContext.Current.Session.Item("curProjetID") IsNot Nothing Then
btnSaveIndicateurs_Click()
btnSaveEnTete_Click()
btnSaveGen_Click()
btnSavePlanif_Click()
End If
End If
HttpContext.Current.Session.Item("curProjetID") = hid_selProjetID.Value
Response.Redirect("Projet.aspx")
End Sub
谢谢
【问题讨论】:
-
显示处理点击事件并设置会话变量的代码。
-
1 秒 plz 它来了。我试图使它更具可读性和简单性。我的代码是法语
-
在 asp.net 中,会话对象被使用它的请求“锁定”。如果第二个请求到达,而第一个请求仍在执行,则第二个请求将等待第一个请求完成,然后才能访问会话对象。也许会有所帮助。
-
我不明白为什么它会覆盖我所有的项目
-
您的
NextProj方法有什么作用? WebMethods 是静态的,这意味着由所有请求共享。我假设您必须查看那里才能找到问题的根源。 @Johnny5:这仅适用于来自同一用户的请求,由于用户多次单击该按钮,因此此处实际上适用。