Asp.net core 如何将输入选定行的所有文本传递到操作中?

Asp.net core 如何将输入选定行的所有文本传递到操作中?,asp.net-core,asp.net-core-mvc,model-binding,Asp.net Core,Asp.net Core Mvc,Model Binding,我在我的项目中有这个视图 我想获得所选每一行的输入文本 如何将输入选定行的所有文本传递到操作中 <table width="100%" class="table table-striped table-bordered table-hover" id="dataTables-example"> <thead> <tr> <th width="45%">Select</th>

我在我的项目中有这个视图

我想获得所选每一行的输入文本

如何将输入选定行的所有文本传递到操作中

<table width="100%" class="table table-striped table-bordered table-hover" id="dataTables-example">
    <thead>
        <tr>
            <th width="45%">Select</th>
            <th width="45%">User Name</th>
            <th width="5%">Description</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.TypeList)
        {
            <tr>
                <td>
                    <input type="checkbox" name=checklist" id="checklist"/>
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.UserName)
                </td>
                <td>
                    <input type="text" name="Extradecription"/>
                </td>
            </tr>
        }
    </tbody>

如果您试图获得控制器操作代码中显示的两个不同数组,则非选定项的文本将出现问题,复选框的数组将按预期绑定,但说明将不同,请明确,请检查以下示例:

假设我们有一个包含树选项的列表:

  • 100-Foo
  • 200巴
  • 300-扎兹
如果我们为项目设置以下选项:

  • 福安
  • 扎兹,c
如果我们查看请求,这是原始请求:

checklist = 100,300
Extradecription = a,null,c
因此,麻烦在于避免为未选择的选项绑定空描述,这很复杂,在这种情况下,我向您推荐一个明确的解决方案:

  • 创建模型以创建实体流程
  • 为选项创建模型
  • 在“创建实体模型”中添加选项模型列表
  • 初始化模型以创建新实体
  • 使用asp for标记在视图中呈现输入
  • 检索创建新实体的请求
  • 我将假定模型和属性的名称,以显示如何在请求中绑定类型化数组,并根据您的场景更改名称

    创建实体模型:

    public class CreateEntity
    {
        public CreateEntity()
        {
            Items = new List<SelectedItem>();
        }
    
        // Step 3
        [BindProperty]
        public List<SelectedItem> Items { get; set; }
    
        // Another properties
    }
    
    呈现选项列表:

    @for (var i = 0; i < Model.Items.Count; i++)
    {
        <input asp-for="@Model.Items[i].IsSelected" />@Model.Items[i].Name
        <input asp-for="@Model.Items[i].Desc" />
        <br/>
    }
    
    for(var i=0;i } 控制器中的GET和POST操作:

    [HttpGet]
    public IActionResult CreateOption()
    {
        // Set the items list
        var model = new CreateEntity
        {
            Items = new List<SelectedItem>
            {
                new SelectedItem{ Code = 100, Name = "Foo" },
                new SelectedItem{ Code = 200, Name = "Bar" },
                new SelectedItem{ Code = 300, Name = "Zaz" }
            }
        };
    
        return View(model);
    }
    
    [HttpPost]
    public IActionResult CreateOption(CreateEntity form)
    {
        // Retrieve only selected items
        var query = form.Items.Where(item => item.IsSelected == true).ToList();
    
        return View();
    }
    
    [HttpGet]
    public IActionResult CreateOption()
    {
    //设置项目列表
    var模型=新的CreateEntity
    {
    项目=新列表
    {
    新建SelectedItem{Code=100,Name=“Foo”},
    新建SelectedItem{Code=200,Name=“Bar”},
    新建SelectedItem{Code=300,Name=“Zaz”}
    }
    };
    返回视图(模型);
    }
    [HttpPost]
    公共IActionResult CreateOption(CreateEntity表单)
    {
    //仅检索选定的项目
    var query=form.Items.Where(item=>item.IsSelected==true);
    返回视图();
    }
    
    如果您想了解有关Razor页面中复选框的更多信息,请查看以下链接:


    请让我知道此答案是否有用。

    是否要获取要链接的值或将所有值获取到数组中?将所有值获取到数组中(仅选定行)是否可以显示控制器操作代码?是。更新我的问题请检查我的答案
    @for (var i = 0; i < Model.Items.Count; i++)
    {
        <input asp-for="@Model.Items[i].IsSelected" />@Model.Items[i].Name
        <input asp-for="@Model.Items[i].Desc" />
        <br/>
    }
    
    [HttpGet]
    public IActionResult CreateOption()
    {
        // Set the items list
        var model = new CreateEntity
        {
            Items = new List<SelectedItem>
            {
                new SelectedItem{ Code = 100, Name = "Foo" },
                new SelectedItem{ Code = 200, Name = "Bar" },
                new SelectedItem{ Code = 300, Name = "Zaz" }
            }
        };
    
        return View(model);
    }
    
    [HttpPost]
    public IActionResult CreateOption(CreateEntity form)
    {
        // Retrieve only selected items
        var query = form.Items.Where(item => item.IsSelected == true).ToList();
    
        return View();
    }