如何将输入选定行的所有文本付诸行动?

How to pass all text of input selected row into action?

我的项目中有这个视图。

我想获取选中的每一行中的输入文本。

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

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

我的行动。如何获得所选行的文本和复选框的相应值

    public IActionResult Index()
    {
        return View(repository.GetUser());
    }


    public IActionResult Save(int[] checklist,string[] Extradecription)
    {
        repository.Save(checklist,Extradecription);
        return View(repository.GetUser());
    }

如果您尝试获得两个不同的数组,如您在 controller-action 代码中所示,未选中项目的文本会出现问题,复选框数组将按预期绑定,但用于描述会有所不同,为了清楚起见,请查看以下示例:

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

  • 100 - 福
  • 200 - 条
  • 300 - 扎兹

如果我们为项目设置以下选择:

  • 啊啊啊
  • 扎兹,c

如果我们查看请求,这是原始请求:

checklist = 100,300
Extradecription = a,null,c

所以,麻烦的是避免为未选择的选项绑定空描述,这很复杂,在这种情况下我向您推荐一个明确的解决方案:

  1. 创建模型创建实体流程
  2. 为选项创建模型
  3. 在创建实体模型中添加选项模型列表
  4. 初始化模型以创建新实体
  5. 使用 asp-for 标签在视图中呈现输入
  6. 检索创建新实体的请求

我将假设模型和属性的名称来展示如何在您的请求中绑定类型化数组,根据您的场景更改名称。

创建实体模型:

public class CreateEntity
{
    public CreateEntity()
    {
        Items = new List<SelectedItem>();
    }

    // Step 3
    [BindProperty]
    public List<SelectedItem> Items { get; set; }

    // Another properties
}

选项型号:

public class SelectedItem
{
    public bool IsSelected { get; set; }

    public int Code { get; set; }

    public string Name { get; set; }

    public string Desc { get; set; }
}

正在呈现选项列表:

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

控制器中的 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();
}

如果您想了解有关 Razor 页面中复选框的更多信息,请查看此 link:Checkboxes in a Razor Pages Form

如果这个答案有用,请告诉我。