We have an aspx page which calls the code behind using $post.
The code works well until there are 2 (or more) users who do the post at the same time.
When that happens, the one user's data gets returned on the other's webpage.
The code is in VB.NET but I think the issue is in the way the aspx works with the code behind, so I've included C# in the tags. Happy to hear any C# suggestions as well :)
function getDetails() {
if ($('.loader-container').is(':visible')) return;
var newItem = "";
var bool;
var Barcode = $('#txtBarcode').val()
$('.loader-container').show();
var IBTOutNumber = Barcode;
var formData = {
IBTOutNumber: IBTOutNumber,
};
RequestUrl = "sendstock.aspx?Page=SendStock";
RequestUrl += "&Action=GetStockDetails";
$.post(RequestUrl, { FormData: JSON.stringify(formData) }, function (respone) {
$('.loader-container').hide();
if (respone.Success == true) {
var dataItems = JSON.parse(respone.dt)
$.each(dataItems, function (index, row) {
newItem += "<tr class='dispatch Pointer'>" +
"<td id='IBTOutNumber' >" + row.transaction_number + "</td>" +
"<td id='BranchName'>" + row.branch_name + "</td>" +
"<td id='BranchCode'>" + row.branch_code + "</td>" +
"</tr>";
$("#errMsg").addClass("hide")
$("#stock tbody").append(newItem);
bool = true;
});
count()
}
}, 'json');
}
Here is the code behind.
Dim Action = String.Empty
Dim Page = String.Empty
Dim Message = String.Empty
If String.IsNullOrEmpty(Request.QueryString("Action")) = False Then
Action = Request.QueryString("Action").ToString()
End If
If Request.QueryString("Page") IsNot Nothing And Request.QueryString("Page") <> "" Then
Page = Request.QueryString("Page").ToString()
Dim RequsestFormData = Request.Form("formData")
Select Case Page
Case "SendStock"
Select Case Action
Case "GetStockDetails"
Dim getStock As New GetStock
Dim getDetails = JsonConvert.DeserializeObject(Of GetStockDetails)(RequsestFormData)
getStock = GetStockDetail(getDetails.IBTOutNumber)
Message = JsonConvert.SerializeObject(getStock)
Response.Clear()
Response.Write(Message)
Response.ContentType = "Text/Json"
_SendContent = True
End Select
If _SendContent = True Then
Response.End()
End If
Here is the code for the GetStockDetails function:
Public Function GetStockDetail(ByVal IBTOutNumber As String) As GetStock
Dim getStock As New GetStock
Try
Dim dt As New DataTable
dt.Columns.Add("transaction_number")
dt.Columns.Add("branch_code")
dt.Columns.Add("branch_name")
dt.Columns.Add("address_line_1")
dt.Columns.Add("address_line_2")
dt.Columns.Add("address_line_3")
dt.Columns.Add("address_line_4")
dt.Columns.Add("address_line_5")
dt.Columns.Add("counter", GetType(Integer))
Dim _ReturnedData As DataTable
Try
_ReturnedData = _BLayer.ReturnBranchDetails("010", IBTOutNumber, True)
Catch ex As Exception
_blErrorLogging.ErrorLogging(ex)
getStock.Message = "Something went wrong."
getStock.Success = False
Return getStock
End Try
If _ReturnedData.Rows(0)("error") <> "" Then
getStock.ErrorMessages &= _ReturnedData.Rows(0)("error") & vbCrLf
GoTo NoLine
End If
dt.Rows.Add(IBTOutNumber, _ReturnedData.Rows(0)("branch_code"), _ReturnedData.Rows(0)("branch_name"), _ReturnedData.Rows(0)("address1"), _ReturnedData.Rows(0)("address2"), _ReturnedData.Rows(0)("address3"), _ReturnedData.Rows(0)("address4"), _ReturnedData.Rows(0)("address5"))
NoLine:
Dim json As String = JsonConvert.SerializeObject(dt, Formatting.Indented)
getStock.dt = json
getStock.Success = True
Catch ex As Exception
_blErrorLogging.ErrorLogging(ex)
getStock.Message = "Something Went Wrong."
getStock.Success = False
Return getStock
End Try
Return getStock
End Function
And code for the ReturnBranchDetails function:
Public Function ReturnBranchDetails(ByVal CompanyCode As String, ByVal IBTOutNumber As String,
ByVal isDispatch As Boolean) As DataTable
Dim curdata As New DataTable
curdata.TableName = "dispatch"
curdata.Columns.Add("error")
curdata.Columns.Add("branch_name")
curdata.Columns.Add("branch_code")
curdata.Columns.Add("address1")
curdata.Columns.Add("address2")
curdata.Columns.Add("address3")
curdata.Columns.Add("address4")
curdata.Columns.Add("address5")
tmpSQL = "SELECT branch_details.branch_name,dispatched_timestamp,receiving_date " &
"FROM ibt_transactions " &
"WHERE ibt_transactions.transaction_number = '" & IBTOutNumber & "' " &
"LIMIT 1"
Try
Ds = usingObjDB.GetDataSet(_ConnectionString, tmpSQL)
If usingObjDB.isR(Ds) Then
For Each dr As DataRow In Ds.Tables(0).Rows
If isDispatch = True Then
If dr("dispatched_timestamp") & "" <> "" Then
curdata.Rows.Add("IBT Out " & dr("receiving_date") & " has already been dispatched.")
Return curdata
'Return "IBT Out " & dr("transaction_number") & " has already been dispatched."
End If
Else
If dr("receiving_date") & "" <> "" Then
curdata.Rows.Add("IBT Out " & dr("transaction_number") & " has not been dispatched.")
Return curdata
'Return "IBT Out " & dr("transaction_number") & " has already been dispatched."
End If
End If
curdata.Rows.Add("", dr("branch_name"), dr("receiving_branch_code"), dr("address_line_1"), dr("address_line_2"),
dr("address_line_3"), dr("address_line_4"), dr("address_line_5"))
Next
Else
curdata.Rows.Add("IBT Out Number: " & RG.Apos(IBTOutNumber) & " does not exist.")
Return curdata
'Return "IBT Out Number: " & RG.Apos(IBTOutNumber) & " does not exist."
End If
Catch ex As Exception
curdata.Rows.Add(ex.Message)
End Try
Return curdata
End Function