到目前为止,我无法弄清楚什么不能与我的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">
答案 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; }
}