我的模型有一个属性列表,此属性还有另一个内部。 我在进行提交之前对此属性列表进行了更改,但是许多属性没有值,它们丢失了。
带列表的主模型
public class PedidosViewModel : BaseFormViewModel<long>
{
//Main properties here
public List<PedidosDetalleViewModel> PedidosDetalle { get; set; }
}
public class PedidosDetalleViewModel
{
public long Id { get; set; }
public long IdPedido { get; set; }
public long IdEstiloCombinacion { get; set; }
public string Combinacion { get; set; }
public string Descripcion { get; set; }
[Required]
[RegularExpression(@"^[0-9]*$", ErrorMessage = "La Cantidad debe ser numérico entero")]
public int CantidadPares { get; set; } = 0;
public decimal Precio { get; set; }
public decimal PrecioMoneda { get; set; }
public decimal Importe { get; set; }
public decimal ImporteMoneda { get; set; }
public int Estatus { get; set; }
public string EstatusStr { get; set; }
public List<PedidosDetalleCorridaViewModel> PedidosDetalleCorrida { get; set; }
}
public class PedidosDetalleCorridaViewModel
{
public long Id { get; set; }
public long IdPedidoDetalle { get; set; }
[StringLength(20)]
public string Punto { get; set; }
[StringLength(20)]
public string Valor { get; set; }
[RegularExpression(@"^[0-9]*$", ErrorMessage = "La Cantidad debe ser numérico entero")]
public int CantidadPares { get; set; } = 0;
}
在具有列表详细信息的局部视图中,我有:
@{ int rowNum = 0; }
@for (int j = 0; j < Model.PedidosDetalle.Count(); j++)
{
<tr>
<td>
@(rowNum += 1)
@Html.HiddenFor(m => m.PedidosDetalle[j].Id)
@Html.HiddenFor(m => m.PedidosDetalle[j].IdEstiloCombinacion)
@Html.HiddenFor(m => m.PedidosDetalle[j].IdPedido)
@Html.HiddenFor(m => m.PedidosDetalle[j].Combinacion)
@Html.HiddenFor(m => m.PedidosDetalle[j].Descripcion)
@Html.HiddenFor(m => m.PedidosDetalle[j].Precio)
@Html.HiddenFor(m => m.PedidosDetalle[j].PrecioMoneda)
@Html.HiddenFor(m => m.PedidosDetalle[j].Importe)
@Html.HiddenFor(m => m.PedidosDetalle[j].ImporteMoneda)
@Html.HiddenFor(m => m.PedidosDetalle[j].Estatus)
@Html.HiddenFor(m => m.PedidosDetalle[j].EstatusStr)
@Html.HiddenFor(m => m.PedidosDetalle[j].CantidadPares)
@for (int i = 0; i < Model.PedidosDetalle[j].PedidosDetalleCorrida.Count(); i++)
{
@Html.HiddenFor(m => m.PedidosDetalle[j].PedidosDetalleCorrida[i].Id)
@Html.HiddenFor(m => m.PedidosDetalle[j].PedidosDetalleCorrida[i].IdPedidoDetalle)
@Html.HiddenFor(m => m.PedidosDetalle[j].PedidosDetalleCorrida[i].Punto)
@Html.HiddenFor(m => m.PedidosDetalle[j].PedidosDetalleCorrida[i].Valor)
@Html.HiddenFor(m => m.PedidosDetalle[j].PedidosDetalleCorrida[i].CantidadPares)
}
</td>
<td>@Html.DisplayFor(m => m.PedidosDetalle[j].Combinacion)</td>
<td>@Html.DisplayFor(m => m.PedidosDetalle[j].Descripcion)</td>
<td>@Html.DisplayFor(m => m.PedidosDetalle[j].CantidadPares)</td>
<td>@Html.DisplayFor(m => m.PedidosDetalle[j].PrecioMoneda)</td>
<td>@Html.DisplayFor(m => m.PedidosDetalle[j].ImporteMoneda)</td>
<td>@Html.DisplayFor(m => m.PedidosDetalle[j].EstatusStr)</td>
<td>
<a class="btn btn-md btn-primary" onclick="CargarDetalle(@Model.PedidosDetalle[j].Id)" href="javascript:void(0);"><i class="fa fa-pencil"></i> Editar</a>
</td>
<td>
<a onclick="EliminarPedidoDetalle(@Model.PedidosDetalle[j].Id)" href="javascript:void(0);"><i class="glyphicon glyphicon-remove-sign icons-app icons-md icons-app-danger"></i></a>
</td>
</tr>
}
如您所见,许多隐藏的控件只是在我发回邮件时保留值,但是 Id,Importe,Estatus 之类的属性丢失了它们的值。我正在考虑使用会话(因为.net MVC没有viewstates)来临时保存所有值的明细列表,并在需要保存更改之前编辑值列表。 每次我在列表中添加新记录时,我都使用javascript通过ajax调用加载部分视图,以传递所有已序列化的 form 表单。 使用MVC,Ajax并在我的主模型中维护值是一个解决方案。