具有动态列表属性的模型在回发时丢失值

时间:2018-11-09 22:42:06

标签: .net model-view-controller

我的模型有一个属性列表,此属性还有另一个内部。 我在进行提交之前对此属性列表进行了更改,但是许多属性没有值,它们丢失了。

带列表的主模型

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并在我的主模型中维护值是一个解决方案。

这是屏幕: enter image description here

0 个答案:

没有答案