![](/img/trans.png)
[英]ASP.NET MVC 4 WebApi JsonValueProviderFactory JSON to JavaScript Date
[英]ASP.NET MVC and WebAPI inserting and retriveing records with database table
我目前正在使用ASP.NET創建網頁。
我在以下位置有一個頁面:myUrl / INVs / Transaction
從用戶的角度來看:我現在實際要做的是在頁面中創建項目列表。 然后,我按保存按鈕。 刷新同一頁面以顯示我剛才創建的項目。
按下保存按鈕后,在我的視圖中,它執行以下javascript代碼:
//some javascript code written here.
for (i = 0; i < rowCount; i++) {
//some javascript code written here.
$.ajax({
type: 'POST',
data: { 'obj': newYTDTRNIObj },
url: '/INVs/ProcessCreateYTDTRNIAsync',
success: function (data) {
console.log(data);
}
});
}
if (currentVoucherNumIsEmpty) {
$.ajax({
type: 'POST',
data: { 'obj': newInvVouchObj },
url: '/INVs/ProcessPatchTABVOUAsync',
success: function (data) {
if (currentPageTitle == "Inventory Receipt- Misc Receipt") {
location.href = currentUrl + "INVs/Transaction?tType=1&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;
} else if (currentPageTitle == "Inventory Receipt- Return To Stock") {
location.href = currentUrl + "INVs/Transaction?tType=2&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;
} else if (currentPageTitle == "Inventory Receipt- Production Receipt") {
location.href = currentUrl + "INVs/Transaction?tType=3&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;
} else if (currentPageTitle == "Inventory Receipt- Purchase Receipt") {
location.href = currentUrl + "INVs/Transaction?tType=4&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;
} else if (currentPageTitle == "Inventory Issue- Misc Issue") {
location.href = currentUrl + "INVs/Transaction?tType=5&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;
} else if (currentPageTitle == "Inventory Issue- Production Issue") {
location.href = currentUrl + "INVs/Transaction?tType=6&id=" + newInvVouchObj.PREFIX + newInvVouchObj.VOUCHNO;
}
}
});
}
它通過兩個ajax調用將數據發送到控制器。 在第二次ajax調用的成功功能處,它再次重定向回同一視圖,只是這次是帶有參數。
當使用這些參數調用視圖時,它實際上會加載並顯示由上述c#函數插入到數據庫中的記錄: ProcessCreateYTDTRNIAsync
以下是我的C#代碼:
[HttpPost]
public async Task<string> ProcessCreateYTDTRNIAsync(INV_YTDTRNIObj obj, bool edit = false, bool issue = false)
{
// some c# code written here.
var postTask = createclient.PostAsJsonAsync<YTDTRNI>("api/INV_API/postYTDTRNI", newYTDRNI);
postTask.Wait();
var result = postTask.Result;
if (result.IsSuccessStatusCode){
}
return "Record created";
}
[Route("api/INV_API/postYTDTRNI/")]
public async Task<string> PostYTDTRNIAsync(YTDTRNI ytdtrniObj)
{
db.YTDTRNIs.Add(ytdtrniObj);
await db.SaveChangesAsync();
return "YTDTRNI object created";
}
[HttpPost]
public async Task<string> ProcessPatchTABVOUAsync(TABVOU obj)
{
// some c# code written here.
HttpClient client = new HttpClient();
var result = await client.SendAsync(request);
if (result.IsSuccessStatusCode)
{
}
return "Updated voucher number";
}
我注意到的是:當我插入2條記錄時,在某些情況下,顯示我的視圖后,第二條記錄將插入數據庫表中。 所以我的視圖僅顯示插入的第一條記錄,這是一個不一致的行為,有時將2條記錄插入數據庫表中,並在刷新頁面時顯示2條記錄。
發生這種情況是因為在刷新頁面之前我沒有等待第一個ajax完成嗎?
這就是所謂的Ajax緩存 。
Ajax將檢查結果,因此除非刷新頁面或禁用緩存,否則您將在視圖中看不到更新的數據。
您可以嘗試幾種方法,首先將Ajax cahce設置為false :
$.ajax({
type: 'POST',
data: { 'obj': newInvVouchObj },
url: '/INVs/ProcessPatchTABVOUAsync',
cache: false,
success: function (data) {
或全局使用ajaxSetup() :
$.ajaxSetup({ cache: false });
我利用了另一個問題中提到的方法
我創建了一個數組,該數組將存儲將數據插入數據庫的ajax請求的所有promise。
然后,我使用$.when.apply(null, promises).done
來確保在刷新頁面之前,for循環中的ajax請求已完成。 這樣可以確保在刷新頁面之前將所有數據插入數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.