簡體   English   中英

如何將同一路由發送的兩個不同對象保存到api?

[英]How to save two different objects sent by the same route to the api?

你好社區我有兩個類,一個叫做稅,另一個叫做稅細節,我創建了一種不能正常工作的表格,因為我沒有使用 blazor 的典型編輯表格,我有輸入要填寫和在它們的綁定值中,將值發送到數據庫。 The problem is that in the form some values come from the tax class and others from the tax class details so I don't know how to pass the object to the route that goes to the controller since it only accepts one and not two and I想要將數據一起發送並同時從數據庫中填充稅表和稅明細表。

這些是類:

public class Impuesto
    {
        [Key]
        public Guid ImpuestoId { get; set; }  
        public  ICollection<ImpuestoDetalle> ImpuestosDetalle { get; set; } 
        
        public string ClaveProdServ { get; set; }  
        public string ClaveUnidad { get; set; } 
    }
    public class ImpuestoDetalle
    {
        [Key]
        public Guid ImpuestoDetalleId { get; set; }
        public TipoImpuesto TipoImpuesto { get; set; }
        public EfectoImpuesto EfectoImpuesto { get; set; }
        public decimal Tasa { get; set; } 
    }

這些綁定值的形式來自稅收 class:

<input type="text" class="form-control" @bind-value="@Impuesto.ClaveProdServ" />

相同形式的這些值來自稅 class 詳細信息:

<input type="number" class="form-control" @bind-value="@ImpuestoDetalle.Tasa" />

這里我保存了表單數據,但我只將稅 class 的值發送到稅表,我缺少稅 class 詳細信息的值:

@code {
    private Impuesto Impuesto = new Impuesto();    
    private ImpuestoDetalle ImpuestoDetalle = new ImpuestoDetalle();    

    public async Task GuardarImpuesto()
    {    
        var httpResponse = await repositorio.Post("api/Impuesto", Impuesto);
        @if (httpResponse.Error)
        {
            var body = await httpResponse.GetBody();
            await mostrarMensajes.MostrarMensajeError(body);
        }
        else
        {
            await mostrarMensajes.MostrarMensajeExitoso("Impuesto Agregado");
            navigationManager.NavigateTo("/formulario-impuesto");
        }
    }
}

您可以將這兩個對象組合在一個新的 model 中,該對象僅用於客戶端-服務器通信中的數據傳輸。 例如:

Model:

public class ImpuestoModelo 
{
    public Impuesto Tax { get; set; }
    public ImpuestoDetalle TaxDetails { get; set; }
}

model 可以添加到共享項目中,並在服務器和客戶端中重復使用。

節省稅:

public async Task GuardarImpuesto()
{    
    var taxModel = new ImpuestoModelo { Tax = Impuesto, TaxDetails = ImpuestosDetalle };
    var httpResponse = await repositorio.Post("api/Impuesto", taxModel);
    @if (httpResponse.Error)
    {
        var body = await httpResponse.GetBody();
        await mostrarMensajes.MostrarMensajeError(body);
    }
    else
    {
        await mostrarMensajes.MostrarMensajeExitoso("Impuesto Agregado");
        navigationManager.NavigateTo("/formulario-impuesto");
    }
}

Controller:

[Route("api/Impuesto")]
public async Task<IActionResult> SaveTax(ImpuestoModelo taxModel)
{
    // validation

    // saving in the db
    db.Taxes.Add(taxModel.Tax);
    db.TaxDetails.Add(taxModel.TaxDetails);
}

這是 ASP.NET 內核的示例 API 方法。 您可以使用另一個后端,但邏輯將是相似的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM