Blazor 多个 NumericUpDownField 使用 MatBlazor 绑定

Blazor multiple NumericUpDownField binding using MatBlazor

我是 Blazor 的新手,通常也是前端开发的新手。

我正在尝试实现代表单一产品的网店卡片订购。此外,我想在每张卡片上都有 MatNumericUpDownField,但我不想创建将绑定到一百个 NumericUpDown 字段的一百个字段。我需要一些动态解决方案。

这是我的代码:

ProductCard

@page "/productcard"
@inherits ProductCardBase

@if (productsList == null)
{
    <div class="spinner"></div>
}
else
{
    <div class="card-deck">
        @foreach (var p in productsList)
        {
        <div class="card m-3" style="min-width: 18rem; max-width:30.5%;">
            <div class="card-header">
                <h3>@p.Caption</h3>
            </div>
            <div class="card-body text-center">
                <h4>Product ID : @p.ProductID</h4>
            </div>

            <img class="" src="@p.Pictures.FirstOrDefault()" />


            @if (p.Pictures.Count > 0)
            {
                <img class="card-img-top" src="@convertImageToDisplay(p.Pictures.FirstOrDefault().PictureDisplay.ToString())" />
            }


            <p>
                <MatNumericUpDownField Label="Quantity"
                                       @bind-Value=@testingNullableDecimal2
                                       DecimalPlaces=0
                                       Minimum=0 Maximum=null>
                </MatNumericUpDownField>
            </p>


            <div class="card-footer text-center">
                <a href=""
                   class="btn btn-primary m-1">View</a>

                <a href="#" class="btn btn-primary m-1">Edit</a>

                <a href="#" class="btn btn-danger m-1">Delete</a>
            </div>

        </div>

        }
    </div>

ProductCardBase

public class ProductCardBase : ComponentBase
{
    [Inject]
    IApiCallService<Product> apiCallService { get; set; }


    Product product { get; set; }
    public bool Result { get; set; }
    public string RecordName { get; set; }
    //public string[] Products { get; set; }
    public bool IsGridViewFiltered { get; set; }
    bool isLoading = true;
    public string SelectedBrand { get; set; }

    protected decimal? testingNullableDecimal2 = null;


    public bool IsVisible { get; set; }

    protected List<Product> productsList { get; set; }


    protected override async Task OnInitializedAsync()
    {
        product = new Product();

        await LoadProducts();
    }


   protected void Click(MouseEventArgs e)
    {
       
        testingNullableDecimal2 += 100;
    }

    private async Task LoadProducts()
    {
        await Task.Delay(500);

        productsList = await apiCallService.GetAllAsList("products");

    }

    protected string convertImageToDisplay(string image)
    {

        if (image != null)
        {
            var fs = string.Format("data:image/jpg;base64,{0}", image);
            return fs;
        }
        return "";
    }
}

在这个例子中testingNullableDecimal2绑定到每张卡,但我需要为每张卡分开它。

一种解决方案是将绑定变量 (testingNullableDecimal) 放入您的产品模型中。

然后你把代码改成这样:

<MatNumericUpDownField Label="Quantity"
                       @bind-Value=@p.testingNullableDecimal2
                       DecimalPlaces=0
                       Minimum=0 Maximum=null>
</MatNumericUpDownField>

顺便说一句,我不熟悉 MatBlazor 工具,但设置最大值 =null 看起来很可疑。这是正确的语法吗?

Jason D 的选择不错。我经常使用的一种技术是传递接口列表而不是实现。然后你可以有一个扩展来公开显示的东西:计数器,是否选择东西的布尔值,等等。