Попытка разместить две модели с одного просмотра - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующее представление, в котором есть модель представления с двумя объектами.

    @model prueba.ViewModel.InfoSolicitanteViewModel

@{
    ViewData["Title"] = "CreateSolicitante";
}

<h1>CreateSolicitante1</h1>

<h4>Solicitante</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="InfoPersonal.Ocupacion" class="control-label"></label>
                <input asp-for="InfoPersonal.Ocupacion" class="form-control" />
                <span asp-validation-for="InfoPersonal.Ocupacion" class="text-danger"></span>
            </div>

            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>

        <div class="col-md-4">
            <form asp-action="Create">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="Solicitante.NombreSolicitante" class="control-label"></label>
                    <input asp-for="Solicitante.NombreSolicitante" class="form-control" />
                    <span asp-validation-for="Solicitante.NombreSolicitante" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Solicitante.Numero" class="control-label"></label>
                    <input asp-for="Solicitante.Numero" class="form-control" />
                    <span asp-validation-for="Solicitante.Numero" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <input type="submit" value="Create" class="btn btn-primary" />
                </div>
            </form>
        </div>
    </div>

    <div>
        <a asp-action="Index">Back to List</a>
    </div>

Контроллеры такие же, автоматически сгенерированные, за единственным исключением, что я сказал info create Get controller, какое представление использовать так, чтобы оба контроллера использовали одно и то же представление. версия framework. NET core 2.2

прямо сейчас я пытаюсь опубликовать модели с кнопкой отправки, но она отправляет только контроллеру, к которому я обращаюсь из соответствующего индекса. Кроме того, если есть способ отправить обе модели на оба контроллера только с одной отправкой, я бы тоже хотел это знать. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

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

Вы можете отправить обе формы с помощью одной кнопки, используя jQuery. ajax () . Сначала вам нужно дать каждой форме уникальный идентификатор. Затем оставьте только одну кнопку отправки и присвойте ей уникальный идентификатор.

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

Вот пример того, как отправить запросы через ajax с jQuery. Я дал идентификаторы форм solicitantesForm и infoPersonalsForm. В этом примере кнопка имеет идентификатор submitButton:

        $(document).ready(function () {
            $('#submitButton').click(function (e) {
                e.preventDefault();
                var solicitantesFormData = new FormData(document.getElementById('solicitantesForm'));
                $.ajax({
                    contentType: false,
                    type: 'POST',
                    cache: false,
                    processData: false,
                    method: 'POST',
                    url: '/Solicitantes/Create',
                    data: solicitantesFormData,
                    success: function (response) {
                        alert('solicitantesForm submitted');
                    },
                    error: function (response) {
                        alert('error submitting solicitantesForm');
                    }
                });
                var infoPersonalsFormData = new FormData(document.getElementById('infoPersonalsForm'));
                $.ajax({
                    contentType: false,
                    type: 'POST',
                    cache: false,
                    processData: false,
                    method: 'POST',
                    url: '/InfoPersonals/Create',
                    data: infoPersonalsFormData,
                    success: function (response) {
                        alert('infoPersonalsForm submitted');
                    },
                    error: function (response) {
                        alert('error submitting infoPersonalsForm');
                    }
                });
            });
        });
0 голосов
/ 06 августа 2020

прямо сейчас я пытаюсь опубликовать модели с кнопкой отправки для каждой, но он отправляет только контроллеру, к которому я обращаюсь из соответствующего индекса.

Добавить asp-controller в укажите, на какой контроллер вы хотите отправить данные.

<div class="row">
<div class="col-md-4">
    <form asp-controller="InfoPersonals" asp-action="Create">
        //...
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>
</div>

<div class="col-md-4">
    <form asp-controller="Solicitantes" asp-action="Create">
        //...
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>
</div>

если есть способ отправить обе модели на оба контроллера только с одной отправкой, я бы тоже хотел это знать.

Я думаю, вы могли бы использовать функцию jquery change, чтобы определить, какой ввод заполняет значение, а затем добавить соответствующее действие в форму:

@model InfoSolicitanteViewModel

@{
    ViewData["Title"] = "CreateSolicitante";
}

<h1>CreateSolicitante1</h1>

<h4>Solicitante</h4>
<hr />
<div class="row">
    <form method="post">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="InfoPersonal.Ocupacion" class="control-label"></label>
            <input asp-for="InfoPersonal.Ocupacion" class="form-control" />
            <span asp-validation-for="InfoPersonal.Ocupacion" class="text-danger"></span>
        </div>

        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Solicitante.NombreSolicitante" class="control-label"></label>
            <input asp-for="Solicitante.NombreSolicitante" class="form-control" />
            <span asp-validation-for="Solicitante.NombreSolicitante" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Solicitante.Numero" class="control-label"></label>
            <input asp-for="Solicitante.Numero" class="form-control" />
            <span asp-validation-for="Solicitante.Numero" class="text-danger"></span>
        </div>

        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>   
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script>
    $(document).ready(function () {
        $("input[name^='Solicitante']").change(function () {
            $('form').removeAttr('action');
            $('form').attr('action', '/Solicitantes/Create');
        });
        $("input[name^='InfoPersonal']").change(function () {
            $('form').removeAttr('action');
            $('form').attr('action', '/InfoPersonals/Create');
        });
    })
</script>
}

Моя тестовая модель:

public class InfoSolicitanteViewModel
{
    public InfoPersonal InfoPersonal { get; set; }
    public Solicitante Solicitante { get; set; }
}
public class InfoPersonal
{
    public int Id { get; set; }
    public string Ocupacion { get; set; }
}
public class Solicitante
{
    public int Id { get; set; }
    public string NombreSolicitante { get; set; }
    public string Numero { get; set; }
}

Результат:

Напишите что-нибудь в поле ввода, а затем нажмите Enter или щелкните вне поля. Это вызовет событие изменения.

введите описание изображения здесь

...