发布一个字符串数组

Posting an array of string

我正在尝试 post 一个字符串数组到 Razor Pages 项目中的 post 操作。为此,我考虑使用隐藏的 <select> 标签。用户会在文本框中输入文本,按下一个按钮,然后我会向 <select> 添加一个新选项,然后 post 使用提交按钮添加整个内容。但是,在 posted 之后,我的模型的数组 属性 是空的。

有谁知道是否有更好的方法或者我做错了什么?

剃刀:

<form method="post">
    <input id="string-value" />
    <input type="button" id="add-item" value="Add item" />
    <select asp-items="@Model.Model.ArrayOfStrings" id="hidden-select"></select>
    <table id="table-items">

    </table>
    <input type="submit" value="Submit" />
</form>

public class ArrayModel
{
    public List<SelectListItem> ArrayOfStrings { get; set; } = new List<SelectListItem>();
}
public class IndexModel : PageModel
{
    [BindProperty]
    public ArrayModel Model { get; set; }

    public void OnGet()
    {
        Model = new ArrayModel();
    }

    public void OnPost()
    {
        System.Diagnostics.Debugger.Break();
    }
}

JS:

$('#add-item').on('click', function () {
    debugger;
    var value = $('#string-value').val();
    $('#hidden-select').append(new Option(value, value));
    $('#table-item tr:last').after('<tr><td>' + value + '</td></tr>')
});

可以找到存储库 here

select 的选项将不会发布,因此这将不起作用。

最简单的方法是将结果附加到带有分隔符 char 的隐藏输入,然后在服务器端进行字符串拆分。

另一种可能更优雅的方法是添加具有相同名称的隐藏输入。每个输入都有自己的值。然后您应该能够在服务器上将其作为列表或数组获取。

剃刀:

  <input value="@String.Join(",", Model.Model.ArrayOfStrings)" id="tags"></select>

JS

$('#tags').val($('#tags').val() + ',' + value);

控制器

 public void OnPost(string tags)
{
    var tagsArray = tags.split(',');
}