Страницы бритвы - Массив модели всегда нулевой - PullRequest
1 голос
/ 01 октября 2019

Я хочу, чтобы текстовое поле, привязанное к массиву, отправляло форму при ее изменении.

Я следил за этим сообщением , чтобы заставить его работать, но свойство в моей моделивсегда ноль. Почему?

Модель

public class TestModel
{
    public int[] MyInts;
}

Контроллер

public ActionResult Index(TestModel model)
{
    if (model.MyInts == null) // <-- Always true
    {
        model.MyInts = new int[] { 1, 2, 3, 4 };
    }
}

Вид

@model TestModel

@using (Html.BeginForm("Index", "Test", FormMethod.Post, new { id = "TestForm" }))
{
<table class="table">
  <thead>
    <tr>
        <th />
@for (int i = 0; i < Model.MyInts.Count(); i ++)
{
        <th>
            @Html.TextBoxFor(x => Model.MyInts[i],  new { onchange = "this.form.submit();" })
        </th>
}

1 Ответ

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

Ваш MyInts в TestModel объявлен как поле.

Вместо него должно быть открытое свойство с get и set.

Измените его на:

public class TestModel
{
    public int[] MyInts { get; set; }
}

Кроме того, как упоминалось в комментариях, ваш контроллер должен содержать метод действия GET и POST Index.

public class TestController : Controller
{
    public ActionResult Index()
    {
        var viewModel = new TestModel {
            MyInts = new [] { 1, 2, 3, 4 }
            };

        return View(viewModel);
    }

    [HttpPost()]
    public ActionResult Index(TestModel model)
    {
        if (model.MyInts == null) 
        {
            model.MyInts = new int[] { 1, 2, 3, 4 };
        }

        // ...

        return RedirectToAction("Index");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...