剃刀页面-模型数组始终为空

时间:2019-10-01 17:27:30

标签: c# razor

我希望绑定到数组的文本框在表单更改后发布。

我一直遵循this post使其正常工作,但是模型上的属性始终为null。为什么?

模型

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 :(得分:0)

您在MyInts中的TestModel被声明为字段。

相反,它必须是具有getset的公共财产

将其更改为:

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");
    }
}