表单列表如何使用Blazor执行此操作?

表单列表如何使用Blazor执行此操作?,blazor,Blazor,我有一个需要更新的对象列表 @foreach (var s in fooList) { <EditForm Model="@s" OnValidSubmit="@HandleValidSubmit"> <tr> <td><InputText id="Name" @bind-Value="@s.Na

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

    @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>
            }

我遇到的问题是,我得到的“名称在当前上下文中不存在”,因此,如何在foo列表中传递更新的名称?

您需要从公共类型派生,否则.NET无法正确执行反射

注意资本V的@bind值

代码可能是这样的

@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;
    }
}
@page/“
@if(傻瓜!=null)
{
@foreach(愚人中常见的s)
{
提交
}
}
@代码
{
公共类
{
公共字符串名称;
公共字符串描述;
}
公共类Edit1:公共
{
公共字符串object1;
}
公共类Edit2:公共
{
公共字符串object2;
}
List WOLDIST=new List(){new Edit1(){Name=“t1”},new Edit2(){Name=“t2”};
私有任务HandleValidSubmit(通用结果)
{
//用结果值做某事
返回Task.CompletedTask;
}
}

什么类型的
s
?您的问题是尝试在
s
上进行更新。for循环已从
s
走到了一个端点,即
null
。您需要获得
EditForm
来告诉您正在提交哪条记录,如@Remi THOMAS在下面的回答中所示
@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;
    }
}