如何将复杂对象发送到blazor页面



我想将一个复杂的对象从另一个blazor页面转发到另一个页面。让我们考虑以下三个类。

public class Order
{

public Supplier { get; }
public List<Product> Products { get; } = new List<Product>();
public decimal TotalValue { get; set; }

public Order(Supplier supplier)
{
Supplier = supplier;
}
}
public class Supplier
{
public int SupplierId { get; set; }
public int DeliveryConditions { get; set; }
public int PaymentConditions { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public int Quantity { get; set; }
}

现在我有两页了。第一个允许用户选择供应商,并根据供应商创建Order类型的对象。第二个页面应该使用这个对象,并且应该允许用户编辑除供应商之外的所有其他订单详细信息。

在我的情况下,我需要首先选择供应商,以便能够筛选出供应商无法交付的所有产品。

我怎么能做到这一点?

谢谢!

您考虑过使用单例服务吗?这可以通过@inject和singleton在所有页面上使用。您可以在选择供应商并生成订单的页面中设置供应商并进行订单。并将其注入其他页面。

public class OrderService{
public Order ActiveOrder {get;private set;}
public Supplier ActiveSupplier {get;set;}
public void GenerateOrder(Supplier s) {
//...
}
}

您必须在Startup中将服务注册为singleton:

builder.Services.AddSingleton<OrderService>();

所以你可以在你的页面中使用它,比如:

@inject OrderService MyOrderService​
private void SupplierSelected(Supplier s)
{
MyOrderService.GenerateOrder(s);
}

您必须使用parameter关键字,当第一个组件有数据时,它将加载到第二个组件:在你放的例子中,第一页将是供应商,当它完成时,你把它作为一个参数传递:

@using Pages
@page "/"
<h1>First supplier page</h1>

<label> Supplier Id</label>
<input @bind="@sup.SupplierId" type="int"/>

<button @onclick="() => this.done=true"> Submit </button>

@if(done) { 

<product supplier="sup"></product>
}
@code{
public bool done=false;
Supplier sup = new();    

}

在这里,您可以看到如何将供应商作为参数传递给第二个blazor组件。在此页面中,您可以根据需要使用对象。

@using Pages
<h3>Second page with supplier as parameter</h3>
//whatever presentation
@code {
[Parameter]
public Supplier supplier{ get; set; }
//whatever logic
}

相关内容

  • 没有找到相关文章

最新更新