未在FormPost中提交EditorFor

时间:2019-01-21 23:15:28

标签: asp.net-mvc html-helper editorfortemplate

我有这个ViewModels: 在“ EMPRESA”内部,我有很多可以正常工作的属性。

public class EmprViewModel
{
    public int ID_EMP { get; set; }
    public string NOME { get; set; }

    public List<TelasViewModel> Telas;
}

public class TelasViewModel
{
    public int ID_TELA { get; set; }
    public string TITULO { get; set; }
    public bool Valor { get; set; }
    public string Selecionado { get; set; }
}

我的剃刀是:

@model SYSTEMNAME.Models.EmprViewModel

<div class="container espaco">
    @using (Html.BeginForm("SalvarAlteracao", "Empresas", FormMethod.Post, new { @id = "frmEmpresas" }))
{
    @Html.HiddenFor(model => model.ID_EMP)

    <div class="row">
        @Html.EditorFor(m => Model.Telas)
    </div>
}

然后我在〜\ Shared \ EditorTemplates \ TelasViewModel.cshtml

中创建了
@model SYSTEMNAME.Models.TelasViewModel

@Html.HiddenFor(m => m.ID_TELA)
@Html.HiddenFor(m => m.TITULO)
@Html.HiddenFor(m => m.Selecionado)

<div class="cols3-25"><label>@Model.TITULO: </label></div>
<div class="cols3-75">@Html.CheckBoxFor(m => m.Valor)</div>

在Razor中生成的输出代码很好,对于每个“ Telas”对象,我都有类似的东西:

<input data-val="true" data-val-number="O campo ID_TELA deve ser um número." data-val-required="O campo ID_TELA é obrigatório." id="Telas_0__ID_TELA" name="Telas[0].ID_TELA" type="hidden" value="2">
<input id="Telas_0__TITULO" name="Telas[0].TITULO" type="hidden" value="Contatos">
<input id="Telas_0__Selecionado" name="Telas[0].Selecionado" type="hidden" value="">

<div class="cols3-25"><label>Contatos: </label></div>
<div class="cols3-75"><input data-val="true" data-val-required="O campo Valor é obrigatório." id="Telas_0__Valor" name="Telas[0].Valor" type="checkbox" value="true"><input name="Telas[0].Valor" type="hidden" value="false"></div>

但是当我收到FormPost时,列表为“空”

[HttpPost]
public async Task<ActionResult> SalvarAlteracao(EmpresaViewModel EmpresaAlterado)
{
...
// Here if I try anything with EmpresaAlterado.Telas, it say "Telas is null";

}

此代码中我可能做错了或忘记了什么?

编辑:

我发帖了,那里发了两次“ Valor”字段,如:

... &Telas%5B0%5D.ID_TELA=2&Telas%5B0%5D.TITULO=Contatos&Telas%5B0%5D.Selecionado=selected&Telas%5B0%5D.Valor=true&Telas%5B0%5D.Valor=false&Telas%5B1%5D.ID_TELA=3&Telas%5B1%5D.TITULO=Usuarios&Telas%5B1%5D.Selecionado=selected&Telas%5B1%5D.Valor=true&Telas%5B1%5D.Valor=false& ...

它与在HTML上创建“ CheckboxFor”的两个字段有关吗?这里是示例:

<div class="cols3-75"><input data-val="true" data-val-required="O campo Valor é obrigatório." id="Telas_0__Valor" name="Telas[0].Valor" type="checkbox" value="true"><input name="Telas[0].Valor" type="hidden" value="false"></div>

1 个答案:

答案 0 :(得分:0)

仅填充公共 properties ,请检查Telas是公共变量,不是属性

更改为

public List<TelasViewModel> Telas { get; set; }

将解决问题