首页 > 解决方案 > 表单列表如何使用 Blazor 执行此操作?

问题描述

我有一个需要更新的对象列表,

    @foreach (var s in fooList)
    {
        <EditForm Model="@s" OnValidSubmit="@HandleValidSubmit">

            <tr>
                <td><InputText id="Name" @bind-Value="@s.Name" /></td>
                <td><InputText id="Description" @bind-value="s.Description" /></td>
                <td></td>
                <td>
                    <button type="submit">Submit</button>
                </td>
            </tr>
            </EditForm>
            }

这是剃须刀。

private async Task HandleValidSubmit()
{
    await Service.UpdateService(s);
}

我遇到的问题是我得到'名称's 在当前上下文中不存在'所以,我如何在 foo 列表中传递更新的 s?

标签: blazor

解决方案


您需要从通用类型派生,否则 .NET 无法正确进行反射。

注意@bind-Value 与大写 V。

代码可能是这样的

@page "/"

@if (fooList != null)
{
    @foreach (Common s in fooList)
    {
        <EditForm Model="s" OnValidSubmit="()=>HandleValidSubmit(s)">

            <tr>
                <td><InputText id="Name" @bind-Value="s.Name" /></td>
                <td><InputText id="Description" @bind-Value="s.Description" /></td>
                <td></td>
                <td>
                    <button type="submit">Submit</button>
                </td>
            </tr>
        </EditForm>
    }
}

@code
{
    public class Common
    {
        public string Name;
        public string Description;
    }

    public class Edit1 : Common
    {
        public string object1;
    }

    public class Edit2 : Common
    {
        public string object2;
    }


    List<Common> fooList = new List<Common>() { new Edit1() { Name = "t1" }, new Edit2() { Name = "t2" } };

    private Task HandleValidSubmit(Common result)
    {
        // Do something with result value
        return Task.CompletedTask;
    }
}

推荐阅读