ASP.NET MVC 和 WebAPI 使用数据库插入和检索记录 table
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 条记录时,有时会在显示我的视图后将第二条记录插入到数据库中 table。所以我的视图只显示 inserted.It 的第一条记录是不一致的行为,在其他时候,这 2 条记录被插入到数据库中 table 并且当页面刷新时,它显示 2 条记录.
发生这种情况是因为我没有等待 first ajax 完成才刷新页面吗?
这就是所谓的Ajax Cacheing。
Ajax 将缓存您的结果,因此除非刷新页面或禁用缓存,否则您不会在视图中看到更新的数据。
您可以尝试几件事,首先是 将您的 Ajax cahce 设置为 false:
$.ajax({
type: 'POST',
data: { 'obj': newInvVouchObj },
url: '/INVs/ProcessPatchTABVOUAsync',
cache: false,
success: function (data) {
或全局 ajaxSetup():
$.ajaxSetup({ cache: false });
我使用了另一个question
中提到的方法
我创建了一个数组,用于存储 ajax 将数据插入数据库的请求的所有承诺。
然后我使用 $.when.apply(null, promises).done
来确保 for 循环中的 ajax 请求在刷新页面之前完成。这可确保在刷新页面之前将所有数据插入数据库。
我目前正在使用 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 条记录时,有时会在显示我的视图后将第二条记录插入到数据库中 table。所以我的视图只显示 inserted.It 的第一条记录是不一致的行为,在其他时候,这 2 条记录被插入到数据库中 table 并且当页面刷新时,它显示 2 条记录.
发生这种情况是因为我没有等待 first ajax 完成才刷新页面吗?
这就是所谓的Ajax Cacheing。
Ajax 将缓存您的结果,因此除非刷新页面或禁用缓存,否则您不会在视图中看到更新的数据。
您可以尝试几件事,首先是 将您的 Ajax cahce 设置为 false:
$.ajax({
type: 'POST',
data: { 'obj': newInvVouchObj },
url: '/INVs/ProcessPatchTABVOUAsync',
cache: false,
success: function (data) {
或全局 ajaxSetup():
$.ajaxSetup({ cache: false });
我使用了另一个question
中提到的方法我创建了一个数组,用于存储 ajax 将数据插入数据库的请求的所有承诺。
然后我使用 $.when.apply(null, promises).done
来确保 for 循环中的 ajax 请求在刷新页面之前完成。这可确保在刷新页面之前将所有数据插入数据库。