【问题标题】:Posting an array of string发布一个字符串数组
【发布时间】:2020-06-19 05:14:19
【问题描述】:

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

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

剃须刀:

<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找到存储库。

【问题讨论】:

    标签: razor-pages asp.net-core-3.1


    【解决方案1】:

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

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

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

    剃须刀:

      <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(',');
    }
    

    【讨论】:

    • 谢谢,您对使用同名隐藏输入的提示有所帮助。我尝试使用索引,但没有奏效。没有索引,模型绑定器能够将其绑定到数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    相关资源
    最近更新 更多