【问题标题】:Submitting changes to a database提交对数据库的更改
【发布时间】:2020-06-18 21:00:53
【问题描述】:

我有以下 Web API 控制器并且运行良好,并且能够使用 API 更新记录,但我想创建 UI 控制器以使用 asp 视图页面将更改发布到数据库,我可以从 API 发布更改但我需要使用 Views 更新

API 控制器:

[HttpPut("Products/{id}")]
public async Task<IActionResult> UpdateProduct(int id, ProductDTO updatedProduct)
{
    updatedProduct = await ProductService.UpdateProductAsync(id, updatedProduct);
    return Ok(updatedProduct);
}

用于编辑/更新产品的 UI 控制器:

public async Task<IActionResult> Edit(int? id)
{
    if (id == null) 
    {
        return NotFound();
    }

    var ProductList = (await ProductService.GetProducts()).ToList();
    var Product = ProductList.FirstOrDefault(a => a.ID == id);
    if (Product == null)
    {
        return NotFound();
    }

    return View(Product);
}

[HttpPut("{id}")]
public async Task<IActionResult> UpdateProduct([FromRoute]int id, [FromBody]ProductDTO updatedProduct)
{
    updatedProduct = await ProductService.UpdateProductAsync(id, updatedProduct);
    return Ok(updatedProduct);
}

IProductService:

public interface IProductService
{
    Task<ProductDTO> UpdateProductAsync(int id, ProductDTO updatedProduct);
}

编辑视图:

<form asp-action="Edit" asp-controller="Product" class="form-horizontal">
    <input type="hidden" asp-for="Id" value="@Model.Id" class="form-control" />
    <input type="text" asp-for="Code" value="@Model.Code" class="form-control" />
    <button class="btn btn-success Product-edit-button" role="button">Save</button>
</form>

如何将更改发布到数据库

【问题讨论】:

  • 数据层中的上下文在哪里?
  • @StuiterSlurf 我在数据层有一个 PDMcontext 很好,我的产品是public virtual DbSet&lt;Product&gt; Product { get; set; }
  • 那么在那个数据层你需要调用上下文的savechangesasync方法来保存对数据库的更改吗?
  • public interface IProductService { Task&lt;ProductDTO&gt; UpdateProductAsync(int id, ProductDTO updatedProduct); } 我有这个问题

标签: asp.net-mvc asp.net-core asp.net-apicontroller


【解决方案1】:

您不能使用FromBody 接收来自表单提交的数据,它从请求正文而不是从发布的表单字段中获取值。

删除[HttpPut("{id}")] 并使用以下操作接收更新后的表单:

[HttpPost]
public async Task<IActionResult> Edit(int id, ProductDTO updatedProduct)

【讨论】:

  • 我收到这个错误http://localhost:43216/api/Product/Products/{id} with status code InternalServerError. Error Content: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter 'ProductKey')
猜你喜欢
  • 2023-03-18
  • 2021-12-26
  • 1970-01-01
  • 2013-12-20
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多