C# 无法更新MongoDB中的文档
我不知道如何在.NETWebAPI中更新文档。我在网上读了很多教程,但仍然没有成功。其中之一是 方法将数据发送到apiC# 无法更新MongoDB中的文档,c#,asp.net,mongodb,axios,C#,Asp.net,Mongodb,Axios,我不知道如何在.NETWebAPI中更新文档。我在网上读了很多教程,但仍然没有成功。其中之一是 方法将数据发送到api updateTemplate: function (_id) { axios({ method: 'put', url: 'http://localhost:57802/api/updateleavetemplate', par
updateTemplate: function (_id) {
axios({
method: 'put',
url: 'http://localhost:57802/api/updateleavetemplate',
params: { Id: _id },
data: {
id: this.chosen.Id,
max: this.chosen.max,
rules: this.chosen.rules
}
}).then(function (response) { console.log(response); })
.catch(function (error) {
console.log(error);
});
},
API控制器
[Route("api/updateleavetemplate/")]
[HttpPut]
public void UpdateLeave(String Id, LeavesTemplate UpdatedModel)
{
_LeavesTemplateRepository.EditLeavesTemplate(Id, UpdatedModel);
}
从存储库中编辑方法
public void EditLeavesTemplate(String Id, LeavesTemplate leavestemplate)
{
LeavesTemplate t = FindLeavesTemplateById(new ObjectId(Id));
t.max = leavestemplate.max;
t.rules = leavestemplate.rules;
var filter = Builders<LeavesTemplate>.Filter.Eq(s => s.Id, leavestemplate.Id);
var result = context.LeavesTemplates.ReplaceOneAsync(filter, t);
}
public void EditLeavesTemplate(字符串Id,LeavesTemplate LeavesTemplate)
{
LevesTemplate t=FindLevesTemplateById(新对象Id(Id));
t、 max=leavestemplate.max;
t、 rules=leavestemplate.rules;
var filter=Builders.filter.Eq(s=>s.Id,leavestemplate.Id);
var result=context.LeavesTemplates.ReplaceOneAsync(filter,t);
}
我只是用以下代码替换存储库中的方法:
public void EditLeavesTemplate(String Id, LeavesTemplate leavestemplate)
{
LeavesTemplate z = FindLeavesTemplateById(new ObjectId(Id));
z.rules = leavestemplate.rules;
z.max = leavestemplate.max;
z.Id = ObjectId.Parse(Id);
ReplaceOneResult e = context.LeavesTemplates.ReplaceOne(Builders<LeavesTemplate>.Filter.Eq(r => r.Id, z.Id), z, new UpdateOptions() { IsUpsert = true });
Console.WriteLine(e.IsAcknowledged);
}
public void EditLeavesTemplate(字符串Id,LeavesTemplate LeavesTemplate)
{
LeavesTemplate z=FindLeavesTemplateById(新对象Id(Id));
z、 rules=leavestemplate.rules;
z、 max=leavestemplate.max;
z、 Id=ObjectId.Parse(Id);
ReplaceOneResult e=context.LeavesTemplates.ReplaceOne(Builders.Filter.Eq(r=>r.Id,z.Id),z,newupdateOptions(){IsUpsert=true});
Console.WriteLine(即已确认);
}
调试时是否在EditLeavesTemplate()
中获取数据?@derloopkat我将存储库中的代码更改为LeavesTemplate z=new LeavesTemplate();z、 rules=leavestemplate.rules;z、 max=leavestemplate.max;z、 Id=ObjectId.Parse(Id);ReplaceOneResult e=context.LeavesTemplates.ReplaceOne(Builders.Filter.Eq(r=>r.Id,z.Id),z,newupdateOptions(){IsUpsert=true});Console.WriteLine(即已确认)代码>。现在,每隔一个字段就被替换为null。仅保存已定义的。将ReplaceOne更改为UpdateOne也无济于事。在此处编辑您的问题并更新代码,无需将其作为注释或答案发布。虽然此代码可能会回答问题,但通常认为添加对代码功能的解释是一种良好做法。这使得不熟悉这一领域的开发人员能够理解代码中正在发生的事情,并帮助他们学会如何在将来自己解决问题。
public void EditLeavesTemplate(String Id, LeavesTemplate leavestemplate)
{
LeavesTemplate z = FindLeavesTemplateById(new ObjectId(Id));
z.rules = leavestemplate.rules;
z.max = leavestemplate.max;
z.Id = ObjectId.Parse(Id);
ReplaceOneResult e = context.LeavesTemplates.ReplaceOne(Builders<LeavesTemplate>.Filter.Eq(r => r.Id, z.Id), z, new UpdateOptions() { IsUpsert = true });
Console.WriteLine(e.IsAcknowledged);
}