gpt4 book ai didi

c# - 无需刷新页面即可更新数据库调用

转载 作者:太空狗 更新时间:2023-10-29 21:53:28 24 4
gpt4 key购买 nike

图像(珍宝)列表显示给用户,在这里用户将选择一个图像,该图像将存储在 Learner_treauser 表中:

List<The_Factory_Chante.Models.Treasure> tresh;

using (The_Factory_Chante.Models.The_FactoryDBContext db2 = new The_Factory_Chante.Models.The_FactoryDBContext())
{

string imageSource = "";

tresh = db2.Treasures.ToList();

foreach (var item in tresh)
{
if (item.itemImage != null)
{
string imageBase = Convert.ToBase64String(item.itemImage);
imageSource = string.Format("data:image/gif;base64,{0}", imageBase);
}

<img id="@item.treasureID" src="@imageSource" onclick="return MakeSure(@item.treasureID)" />
}
}

选择图像时调用的函数。在此函数中,图像被发送到 web 服务方法以保存到数据库,并重新加载页面以进行更新:

function MakeSure(treshID) {

var id = treshID
$.ajax({
url: "../../WebService.asmx/MakeSure",
data: "{ 'id': '" + id + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}

});
window.location.reload();
};

然而,这对用户来说并不是很愉快。更好的方法是在不刷新页面的情况下进行更新。

这里是 Webservice 方法,它接收选择的图像 ID 并将其存储在 Learner_Treasure 表中。

public void MakeSure(int id)
{
using (The_FactoryDBContext db = new The_FactoryDBContext())
{
Learner_Treasure learnTreasure = new Learner_Treasure();

learnTreasure.dateCompleted = DateTime.Today;
learnTreasure.learnerID = UserInfo.ID;
learnTreasure.treasureID = id;

db.Learner_Treasure.Add(learnTreasure);
db.SaveChanges();

}

调用 Learner_Treasure 表的代码。

List<The_Factory_Chante.Models.Learner_Treasure> lern;
using (The_Factory_Chante.Models.The_FactoryDBContext db2 = new The_Factory_Chante.Models.The_FactoryDBContext())
{

string imageSource = "";
lern = db2.Learner_Treasure.ToList();
if (lern != null)
{
foreach (var item in lern)
{
if (item.learnerID == UserInfo.ID)
{
byte[] bytes = db2.Treasures.FirstOrDefault(au => au.treasureID == item.treasureID).itemImage;
string imageBase = Convert.ToBase64String(bytes);
imageSource = string.Format("data:image/gif;base64,{0}", imageBase);
<img id="@item.treasureID" src="@imageSource"/>
}
}

此代码将向用户显示他们选择的所有图像,但是如果我删除 window.location.reload();,此代码仅在页面重新加载时更新。这意味着用户在选择图像后不会立即看到他们选择的图像。

我想做的是在不刷新页面的情况下更新调用 Learner_Table 的代码。

最佳答案

还有另一种方法可以解决这个问题,您可以使用 SignalR图书馆。

这是你需要做的:

查看

// Include the SignalR Script
<script src="~/Scripts/jquery.signalR-2.2.0.js"></script>

// Provide a dynamic proxy for SignalR
<script src="~/signalr/hubs"></script>

// Define hub connection(see below)
var hub = $.connection.yourHub;

// This is what the Hub will call (Clients.All.getImage(imageSource);)
hub.client.getImage = function (img) {
var image = '<img id="' + img.treasureId + '" src="data:image/jpg;base64,' + img.image + '"';
$(image).appendTo("body");
};

// Start the connection to the hub
// Once we have a connection then call the getLearnerTreasureItem on the Hub
$.connection.hub.start().done(function () {
var id = // whatever
hub.server.getLearnerTreasureItem(id);
};

中心

public class YourHub : Hub
{

public void GetLearnerTreasureItem()
{
// All your code
List<The_Factory_Chante.Models.Learner_Treasure> lern;
using (The_Factory_Chante.Models.The_FactoryDBContext db2 = new The_Factory_Chante.Models.The_FactoryDBContext())
{

string imageSource = "";
lern = db2.Learner_Treasure.ToList();
if (lern != null)
{
foreach (var item in lern)
{
if (item.learnerID == UserInfo.ID)
{
byte[] bytes = db2.Treasures.FirstOrDefault(au => au.treasureID == item.treasureID).itemImage;
string imageBase = Convert.ToBase64String(bytes);
imageSource = string.Format("data:image/gif;base64,{0}", imageBase);
}
}

// This will now call the getImage function on your view.
Clients.All.getImage(imageSource);
}
}

关于 dynamic proxy 的信息

关于c# - 无需刷新页面即可更新数据库调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33060785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com