204.sharma Ответов: 0

Как передать массив модели из представления в контроллер и наоборот


Привет,
У меня есть модель 7 свойств. Я добавляю элементы управления моделью динамически в поле зрения.
теперь я хочу получить все значения элементов управления в моем контроллере, и если какая-либо ошибка возникает на стороне сервера, то я хочу передать один и тот же объект модели для просмотра.

Требование заключается в сборе детской информации о человеке. При первом просмотре для ребенка будет отображаться только одна строка. если человек хочет добавить больше дочерних деталей, то элементы управления должны генерироваться динамически на стороне клиента.

Как написать код действия контроллера ?

Что я уже пробовал:

мой код просмотра выглядит следующим образом. Я использую jquery для добавления нового ряда элементов управления.
@model IEquatable< LoginProcess.Models.child_detail_temp>

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>cTable</title>
</head>
<body>
    <script src="~/Scripts/jquery-1.12.4.min.js"></script>
    <script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
    
    <link href="~/Content/themes/base/jquery-ui.min.css" rel="stylesheet" />
    
    @using (Html.BeginForm()) 
    {
        @Html.AntiForgeryToken()
        
        <div class="form-horizontal">
            <h4>child_detail_temp</h4>
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <form method="post">
                <a id="addButton" style="margin: 10px 0;" href="javascript:addRow2();">Add Row</a>
                <table id="formTable">
                    <thead>
                        <tr>
                            <th>@Html.LabelFor(model => model.child_order, htmlAttributes: new { @class = "control-label col-md-2" })</th>
                            <th>@Html.LabelFor(model => model.child_name, htmlAttributes: new { @class = "control-label col-md-2" })</th>
                            <th>@Html.LabelFor(model => model.child_gender, htmlAttributes: new { @class = "control-label col-md-2" })</th>
                            <th>@Html.LabelFor(model => model.child_age, htmlAttributes: new { @class = "control-label col-md-2" })</th>
                            <th>@Html.LabelFor(model => model.child_birth, htmlAttributes: new { @class = "control-label col-md-2" })</th>
                            <th>@Html.LabelFor(model => model.child_relation, htmlAttributes: new { @class = "control-label col-md-2" })</th>
                            <th>@Html.LabelFor(model => model.u_pnumber, htmlAttributes: new { @class = "control-label col-md-2" })</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>
                                @Html.EditorFor(model => model.child_order, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.child_order, "", new { @class = "text-danger" })
                            </td>
                            <td>
                                @Html.EditorFor(model => model.child_name, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.child_name, "", new { @class = "text-danger" })
                            </td>
                            <td>
                                @Html.EditorFor(model => model.child_gender, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.child_gender, "", new { @class = "text-danger" })
                            </td>
                            <td>
                                @Html.EditorFor(model => model.child_age, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.child_age, "", new { @class = "text-danger" })
                            </td>
                            <td>
                                @Html.EditorFor(model => model.child_birth, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.child_birth, "", new { @class = "text-danger" })
                            </td>
                            <td>
                                @Html.EditorFor(model => model.child_relation, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.child_relation, "", new { @class = "text-danger" })
                            </td>
                            <td>
                                @Html.EditorFor(model => model.u_pnumber, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.u_pnumber, "", new { @class = "text-danger" })
                            </td>
                        </tr>
                    </tbody>
                </table>
            </form>
                
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
    }
    
    <script type="text/javascript">
// <![CDATA[
        function addRow() {
            //copy the table row and clear the value of the input, then append the row to the end of the table
            $("#formTable tbody tr:first").clone().find("input").each(function () {
                $(this).val('');
            }).end().appendTo("#formTable");

            //var newRow = $("#formTable tbody tr:first").clone().find("input").each(function () {
            //    $(this).val('');
            //}).end();
            //newRow.find('input[type=datetime]').val('').removeClass('hasDatepicker');
            //newRow.appendTo("#formTable");
            //$("input[type=datetime]").datepicker();

        }

        $(function addRow2() {

            var newRow = $("#formTable tbody tr:first").clone();
            newRow.find("input").val = "";
            $("input[type=datetime]").datepicker();
            $("#addButton").on("click", function () {

                newRow.clone(true).appendTo("#formTable").find("input[type=datetime]").datepicker({
                    dateFormat: 'dd/mm/yy',
                    changeMonth: true,
                    changeYear: true,
                    yearRange: "-60:+0"
                });
            });
        });

        $(document).ready(function () {
            $('input[type=datetime]').datepicker({
                dateFormat: 'dd/mm/yy',
                changeMonth: true,
                changeYear: true,
                yearRange: "-60:+0"
            });

        });

// ]]></script>
</body>
</html>

F-ES Sitecore

Взгляните на это https://www.codeproject.com/Tips/855577/List-of-Model-Object-Post-to-Controller-in-ASP-NET

Основная хитрость заключается в том, как вы называете элементы. Если у вас есть список или массив объектов модели, то убедитесь, что имена элементов указаны в форме;

[0].Prop1
[1].Prop1

и так далее. Когда вы передадите его контроллеру, он будет преобразован в массив\список объектов

0 Ответов