Quiero un cuadro de texto, vinculado a una matriz, para publicar el formulario cuando se cambia.

Estaba siguiendo esta publicación para que funcione, pero el la propiedad en mi modelo es siempre nula. ¿Por qué?

Modelo

public class TestModel
{
    public int[] MyInts;
}

Controlador

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

Vista

@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
TedTrippin 1 oct. 2019 a las 20:27

1 respuesta

La mejor respuesta

Su MyInts en TestModel se declara como un campo.

En su lugar, debe ser una propiedad pública con get y set.

Cámbielo a:

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

Además, como se menciona en los comentarios, su controlador debe contener un método de acción GET y 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");
    }
}
0
pfx 1 oct. 2019 a las 18:33