FormPost 中没有提交 EditorFor
EditorFor is not submitted in FormPost
我有这个视图模型:
在 "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>
但是当我得到表格Post时,列表出现了"null"
[HttpPost]
public async Task<ActionResult> SalvarAlteracao(EmpresaViewModel EmpresaAlterado)
{
...
// Here if I try anything with EmpresaAlterado.Telas, it say "Telas is null";
}
这段代码中我可能做错了什么或忘记了什么?
编辑:
我是 Post,它在字段 "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& ...
它是否与 "CheckboxFor" 在 Html 上创建的两个字段有关?这里的例子:
<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>
只填了public属性,检查一下Telas
是public变量,不是属性
改为
public List<TelasViewModel> Telas { get; set; }
将解决问题
我有这个视图模型: 在 "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>
但是当我得到表格Post时,列表出现了"null"
[HttpPost]
public async Task<ActionResult> SalvarAlteracao(EmpresaViewModel EmpresaAlterado)
{
...
// Here if I try anything with EmpresaAlterado.Telas, it say "Telas is null";
}
这段代码中我可能做错了什么或忘记了什么?
编辑:
我是 Post,它在字段 "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& ...
它是否与 "CheckboxFor" 在 Html 上创建的两个字段有关?这里的例子:
<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>
只填了public属性,检查一下Telas
是public变量,不是属性
改为
public List<TelasViewModel> Telas { get; set; }
将解决问题