【发布时间】:2015-05-15 10:18:04
【问题描述】:
我有一个索引视图调用部分视图,我在其中列出了我的模型(一个 IEnumerable)并绘制复选框以选择一些要更新的项目。
我用 ajax 表单包装了部分视图,以发送模型(带有选中的复选框),但是当它到达控制器操作“Enviar”时,自定义对象参数为空
我不知道为什么,根据一些帖子我的代码应该可以工作,请问我做错了什么?
索引视图
@model IEnumerable<beDGRAIC.T_Sedd_Cuadro_Envio_Empresa>
.....
@Html.Partial("_ListaResumenCarga", Model)
.....
_ListaResumenCarga 视图
@model IEnumerable<beDGRAIC.T_Sedd_Cuadro_Envio_EmpresaViewModel>
@using (Ajax.BeginForm("Enviar", "Upload", new { @id = "FormCabecera" },
new System.Web.Mvc.Ajax.AjaxOptions()
{
HttpMethod = "POST",
InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace,
UpdateTargetId = "SeccionListado",
OnSuccess = "RefrescaListado"
}))
{
<table>
<tbody>
@if (Model != null)
{
foreach (var item in Model)
{
<tr>
<td class="text-center">@Html.EditorFor(modelItem => item.Seleccionado, new { @checked = "checked" })</td>
<td class="text-left">@Html.DisplayFor(modelItem => item.Categoria)</td>
<td class="text-left">@Html.DisplayFor(modelItem => item.Codigo)</td>
<td class="text-left">@Html.DisplayFor(modelItem => item.Nombre)</td>
<td class="text-center">@Html.DisplayFor(modelItem => item.Nro_Registros)</td>
</tr>
@Html.HiddenFor(modelItem => item.Seleccionado)
@Html.HiddenFor(modelItem => item.Id_Cuadro_Envio)
}
}
</tbody>
</table>
<button type="submit">Enviar</button>
}
上传控制器
public class UploadController : Controller
{
[HttpPost]
public ActionResult Enviar(IEnumerable<T_Sedd_Cuadro_Envio_EmpresaViewModel> lT_Sedd_Cuadro_Envio_EmpresaViewModel)
{
....
return View("Envios", vT_Sedd_Envio_Empresa);
}
}
模型类
[DataContract]
[Serializable]
public partial class T_Sedd_Cuadro_Envio_EmpresaViewModel : BEPaginacion
{
[DataMember]
public bool Id { get; set; }
[DataMember]
public bool Seleccionado { get; set; }
[DataMember]
public int Id_Cuadro_Envio { get; set; }
[DataMember]
public int Id_Envio_Empresa { get; set; }
[DataMember]
public string Categoria { get; set; }
.... // more properties
}
【问题讨论】:
-
您需要编辑您的问题并删除所有不相关的代码!基本问题是你部分生成重复的
id(无效的html)和name属性(所以不能绑定到一个集合)。您需要使用for循环(模型需要为IList<beDGRAIC.T_Sedd_Cuadro_Envio_Empresa>)或自定义EditorTemplatefor typeofT_Sedd_Cuadro_Envio_Empresa。然后你有EditorFor()代表Seleccionado,然后是HiddenFor()代表相同的属性 - 即使你命名控件属性,它也只会发回原始值,而不是编辑后的值。 -
绑定到一个集合是一种痛苦。考虑改为每行表格
-
谢谢斯蒂芬!它成功了!发布我所有代码的原因是我在其他帖子中看到用户要求这样做。如果您愿意,您可以发表您的评论作为答案,将其标记为解决方案...非常感谢
-
@culebrin,我冒昧地删除了您问题中的大部分代码,只保留相关的内容。请参考How to create a Minimal, Complete, and Verifiable example
-
非常感谢你,但我很难意识到我的代码中的哪一部分是我的错误的相关部分,这就是我决定放洞代码的原因。现在我可以分析您的编辑以改进我未来的问题。非常感谢。
标签: c# asp.net-mvc ajaxform