Свойство Список моделей имеет значение NULL на Пост в контроллере - PullRequest
0 голосов
/ 29 октября 2019

Итак, я протестировал на чистом проекте проблему, которую получил, и выполнил следующую настройку кода для проверки, возвращает ли пользовательский объект Class ноль, помещенный в список:

ПРОСМОТР

<div>
<div class="jumbotron">

    <h1 class="display-4"><span class="fas fa-user-secret"></span> Babcock Canada - Application Template</h1>
    <br />
    <div class="alert alert-primary" role="alert">
        <span class="fas fa-info-circle"></span>
        <span> This is the Babcock Canada MVC Application template for use in developing content-rich web applications.</span>
    </div>
    <hr class="my-4" />
</div>

<div>

    <div class="container-fluid">


        @if (!string.IsNullOrEmpty(Model.errorMessage))
        {
            <div class="alert alert-danger" role="alert">
                <span class="fas fa-stop-circle"></span> @Html.DisplayFor(alert => alert.errorMessage)
            </div>
        }
        @if (!string.IsNullOrEmpty(Model.successMessage))
        {
            <div class="alert alert-success" role="alert">
                <span class="fas fa-check-circle"></span> @Html.DisplayFor(alert => alert.successMessage)
            </div>
        }

        <div>
            @using (Html.BeginForm("TestAction", "Default", FormMethod.Post))
            {
                @Html.HiddenFor(m => Model.tester[0].tester)
                <button type="submit" class="btn btn-primary">
                    Submit 1
                </button>
            }
        </div>
        <div>
            @using (Html.BeginForm("TestAction", "Default", FormMethod.Post))
            {
                @Html.HiddenFor(m => Model.tester[1].tester)
                <button type="submit" class="btn btn-primary">
                    Submit 2
                </button>
            }
        </div>

    </div>
</div>

TestClass.cs

namespace Test.Models
{
    public class TestClass
    {
        public string tester { get; set; }
    }
}

МОДЕЛЬ

namespace Test.Models
{
/// <summary>
/// This is the default template model.
/// </summary>
public class DefaultModel : SharedModel
{
    public string errorMessage = string.Empty;
    public string successMessage = string.Empty;

    public List<TestClass> tester { get; set; }

    public DefaultModel()
    {

    }

    public void Init()
    {
        tester = new List<TestClass>
                 {
                     new TestClass { tester = "Testing..." },
                     new TestClass { tester = "Testing2..." }
                 };
    }
}
}

CONTROLLER

[HttpPost]
    public ActionResult TestAction(DefaultModel model)
    {
        return View(model);
    }

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

В моем другомИндекс проекта 0 списка, зацикленного таким же образом, возвращает ошибку: «Элемент с тем же ключом уже добавлен».

Так что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Оказывается, это не работает, когда форма находится внутри цикла, должна быть снаружи и ссылаться на значение идентификатора через кнопку отправки, содержащую имя «ID» и значение этого элемента списка.

Предположим, что использование Html.Hidden() будет работать, но это не то, что требовалось для проекта.

0 голосов
/ 29 октября 2019

попробуйте использовать помощник Html.Hidden() вместо

    <div>
        @using (Html.BeginForm("TestAction", "Default", FormMethod.Post))
        {
            @Html.Hidden("tester", Model.tester[0].tester)
            <button type="submit" class="btn btn-primary">
                Submit 1
            </button>
        }
    </div>
    <div>
        @using (Html.BeginForm("TestAction", "Default", FormMethod.Post))
        {
            @Html.Hidden("tester", Model.tester[1].tester)
            <button type="submit" class="btn btn-primary">
                Submit 2
            </button>
        }
    </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...