ASP MVC 5没有收集回收到控制器的集合

时间:2017-07-21 14:47:45

标签: c# asp.net asp.net-mvc razor

到目前为止,我无法弄清楚什么不能与我的ViewModel和控制器一起工作,因为我已经在StackOverflow上关注了一些例子但由于某种原因我的模型没有填满。这是我的Get和Post Controller方法

public ActionResult Registrar(DateTime FechaTarja, long HaciendaId, long[] Pedidos)
{
    if(Pedidos != null && Pedidos.Length > 0)
    {
       List<RegistroPedidoTarjaViewModel> data = new List<RegistroPedidoTarjaViewModel>();
       foreach (long Pedido in Pedidos)
       {
          data.Add(new RegistroPedidoTarjaViewModel {
              PedidoEmbarqueId = Pedido
       });
     }
     return View(new RegistroTarjaViewModel {
         HaciendaId = HaciendaId,
         FechaTarja = FechaTarja,
         Pedidos = data
     });
    }
    return RedirectToAction("Index", new { FechaTarja = FechaTarja.ToString("yyyy-MM-dd"), HaciendaId = HaciendaId });
}

[HttpPost]
public ActionResult Registrar(RegistroTarjaViewModel model)
{
    if (ModelState.IsValid)
    {

    }
    return View(model);
}

我的视图模型

public class RegistroTarjaViewModel
{
    [Required]
    public long HaciendaId { get; set; }
    [Required]
    public DateTime FechaTarja { get; set; }
    public List<RegistroPedidoTarjaViewModel> Pedidos { get; set; }
    public long? ContenedorId { get; set; }
}

我的剃刀视图

@model Project.ViewModels.RegistroTarjaViewModel
@{
    ViewBag.Title = "Registrar Nueva Tarja";
}
<div class="row">
    <div class="col-xs-12 col-md-12">
        <h1>@ViewBag.Title</h1>
    </div>
</div>
@using (Html.BeginForm())
{
    @Html.HiddenFor(model => model.FechaTarja)
    @Html.HiddenFor(model => model.HaciendaId)
    <div class="row">
        <div class="col-xs-12 col-md-12">

        </div>
    </div>
    for (int i = 0; i < Model.Pedidos.Count(); i++)
    {
        @Html.HiddenFor(model => model.Pedidos[i].PedidoEmbarqueId)
        <div class="row">
            <div class="col-xs-12 col-md-12">
                <div class="form-group">
                    @Html.LabelFor(model => model.Pedidos[i].Embarcadas, htmlAttributes: new { @class = "control-label" })
                    @Html.TextBoxFor(model => model.Pedidos[i].Embarcadas, new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.Pedidos[i].Embarcadas, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>
    }
    <input type="submit" value="Registrar Tarja" class="btn btn-primary" />
}

我收到了HaciendaId和FechaTarja属性的回复,但没有回到Pedidos列表中,我错过了什么以包含在Controller中?

修改

以下是文本框

的HTML输出示例
<input class="form-control" data-val="true" data-val-number="El campo Embarcadas debe ser un número." data-val-required="El campo Embarcadas es obligatorio." id="Pedidos_0__Embarcadas" name="Pedidos[0].Embarcadas" type="text" value="0">

1 个答案:

答案 0 :(得分:0)

您的代码正常运行。这是我测试的方式 -

查看与您的相同。

<强>控制器

public class HomeController : Controller
{
    public ActionResult Registrar()
    {
        List<RegistroPedidoTarjaViewModel> data = new List<RegistroPedidoTarjaViewModel>();
        data.Add(new RegistroPedidoTarjaViewModel {PedidoEmbarqueId = 1, Embarcadas = "One"});
        data.Add(new RegistroPedidoTarjaViewModel {PedidoEmbarqueId = 2, Embarcadas = "Two"});
        data.Add(new RegistroPedidoTarjaViewModel {PedidoEmbarqueId = 3, Embarcadas = "Three"});
        data.Add(new RegistroPedidoTarjaViewModel {PedidoEmbarqueId = 4, Embarcadas = "Four"});

        return View(new RegistroTarjaViewModel
        {
            HaciendaId = 1,
            FechaTarja = DateTime.Now,
            Pedidos = data
        });
    }

    [HttpPost]
    public ActionResult Registrar(RegistroTarjaViewModel model)
    {
        if (ModelState.IsValid)
        {

        }
        return View(model);
    }
}

查看模型

public class RegistroTarjaViewModel
{
    [Required]
    public long HaciendaId { get; set; }

    [Required]
    public DateTime FechaTarja { get; set; }

    public List<RegistroPedidoTarjaViewModel> Pedidos { get; set; }
    public long? ContenedorId { get; set; }
}

public class RegistroPedidoTarjaViewModel
{
    public long PedidoEmbarqueId { get; set; }
    public string Embarcadas { get; set; }
}

enter image description here

发布结果 enter image description here