【问题标题】:Post an array of object from view to controller, in asp.net core在asp.net核心中将一组对象从视图发布到控制器
【发布时间】:2020-04-27 19:50:28
【问题描述】:

我的问题如下。我有一门课,我们称之为 MyModel。它包含一个项目列表,

public class MyModel
{
    public int Value { get; set; }
    public string Identity { get; set; }
    public List<Item> Items { get; set; }
}

public class Item
{
    public string Name { get; set; }
    public string Description { get; set; }
}

我想要做的是在 .cshtml 中创建一个视图(表单)并将结果发布到控制器 我知道如何为我只有字符串或数字的模型执行此操作,但是当我希望用户输入值、身份然后输入项目列表时我该怎么做。 因此,用户应该输入
Value、Identity 和(多次)Item

有什么建议吗?没有看到任何例子,所以我问。

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc


    【解决方案1】:

    要从视图发布对象数组到控制器,您可以参考以下演示:

    查看

    @model Demo3.Models.MyModels.MyModel
    
    <div class="row">
     <div class="col-md-4">
        <form asp-action="CreateModel">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Value" class="control-label"></label>
                <input asp-for="Value" class="form-control" />
                <span asp-validation-for="Value" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Identity" class="control-label"></label>
                <input asp-for="Identity" class="form-control" />
                <span asp-validation-for="Identity" class="text-danger"></span>
            </div>
            <div class="form-group">
                <table id="myRows" class="table">
                    <tr class="myrow">
                        <td class="section table-column-center">
                            <label asp-for="Items[0].Name" class="control-label"></label>
                            <input asp-for="Items[0].Name" class="form-control" />
                            <span asp-validation-for="Items[0].Name" class="text-danger"></span>
                        </td>
                        <td class="section table-column-center">
                            <label asp-for="Items[0].Description" class="control-label"></label>
                            <input asp-for="Items[0].Description" class="form-control" />
                            <span asp-validation-for="Items[0].Description" class="text-danger"></span>
                        </td>
                    </tr>
    
                </table>
            </div>
            <div class="item-add">
                <a id="add-row" class="link-button">Add Row</a>
            </div>
            <br/>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
     </div>
    </div>
    
    @section Scripts
    {
    <script>
    $("#add-row").click(function () {
            var nextId = $(".myrow").length;
    
            var rowHtml = '<tr class="myrow">' +
                '<td class="section table-column-center" >' +
                '<input class="form-control" type="text" id="Items_' + nextId + '_Name" name="Items[' + nextId + '].Name" value=""/>' +
    
                '<span class="text-danger field-validation-valid" data-valmsg-for="Items[' + nextId + '].Name" data-valmsg-replace="true"></span>' +
    
                '</td>' +
    
                '<td class="section table-column-center">' +
                '<input class="form-control" type="text" id="Items_' + nextId + '_Description" name="Items[' + nextId + '].Description" value=""/>' +
    
                '<span class="text-danger field-validation-valid" data-valmsg-for="Items[' + nextId + '].Description" data-valmsg-replace="true"></span>' +
    
                '</td>'+
    
                '</tr>';
    
            $("#myRows").append(rowHtml);
        });
     </script>
     }
    

    控制器

        public IActionResult PassDataList()
        {
            return View();
        }
    
        [HttpPost]
        public IActionResult  CreateModel(MyModel model)
        {
            return Json(model);
        }
    

    结果

    【讨论】:

    • 很高兴帮助您解决问题,您可以将我的回复标记为答案吗?这将帮助面临相同或类似问题的其他人快速找到答案。非常感谢!
    猜你喜欢
    • 2020-08-26
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多