您好我一直在寻找这个问题的解决方案,但我没有运气。使用我的viewmodel POST无法获取数据,无论你怎么做,对象都是null。我会把代码放在一起,以便你可以看到我所指的代码。
这是我的ViewModel
public class ProyectosCompletos
{
public IEnumerable<Proyecto> Proyectos { get; set; }
public IEnumerable<Informacion> Informaciones { get; set; }
public IEnumerable<Diseno> Disenos { get; set; }
public IEnumerable<Procedimiento> Procedimientos { get; set; }
public IEnumerable<Programacion> Programaciones { get; set; }
public IEnumerable<Instalacion> Instalaciones { get; set; }
}
这是模型项目,它将是&#34; main&#34;模特
public class Proyecto
{
public int ProyectoID { get; set; }
public string Titulo { get; set; }
public virtual ICollection<Elaboracion> Elaboraciones { get; set; }
public virtual Procedimiento Procedimiento { get; set; }
public virtual Informacion Informacion { get; set; }
public virtual Instalacion Instalacion { get; set; }
public virtual Diseno Diseno { get; set; }
public virtual Programacion Programacion { get; set; }
}
这是例如Instalacion模型,其他类似
public class Instalacion
{
[Key]
[ForeignKey("Proyecto")]
public int ProyectoID { get; set; }
public double HardwareNota { get; set; }
public double SoftwareNota { get; set; }
public virtual Proyecto Proyecto { get; set; }
public virtual ICollection<InstalacionEntrada> Entradas { get; set; }
public virtual ICollection<InstalacionAnotacion> Anotaciones { get; set; }
}
这是控制器
public ActionResult Docente(int? ListaProyectos)
{
//This code is not relevant to the problem
var viewModel = new ProyectosCompletos();
string usuarioActualId = User.Identity.GetUserId();
ApplicationUser usuarioActual = db.Users.FirstOrDefault(x => x.Id == usuarioActualId);
var pro = db.Elaboraciones
.Where(e => e.ApplicationUserID == usuarioActual.Id)
.Select(e => new { e.ProyectoID, e.Proyecto.Titulo});
ViewBag.ListaProyectos = new SelectList(pro, "ProyectoID", "Titulo");
//THIS IS WHAT MATTERS
if (ListaProyectos != null)
{
ViewBag.ProyectoID = ListaProyectos.Value;
viewModel.Proyectos = db.Proyectos.Where(p => p.Archivar == false && p.ProyectoID == ListaProyectos.Value);
viewModel.Informaciones = db.Informaciones.Where(i => i.ProyectoID == ListaProyectos.Value);
viewModel.Procedimientos = db.Procedimientos.Where(i => i.ProyectoID == ListaProyectos.Value);
viewModel.Disenos = db.Disenos.Where(i => i.ProyectoID == ListaProyectos.Value);
viewModel.Programaciones = db.Programaciones.Where(i => i.ProyectoID == ListaProyectos.Value);
viewModel.Instalaciones = db.Instalaciones.Where(i => i.ProyectoID == ListaProyectos.Value);
}
return View(viewModel);
}
对于GET来说,获取数据没有问题。我正确地看到它们并看到了视图
public ActionResult Docente(int ListaProyectos, ProyectosCompletos viewModel)
{
if (ModelState.IsValid)
{
db.Entry(viewModel.Informaciones).State = EntityState.Modified;
db.Entry(viewModel.Disenos).State = EntityState.Modified;
db.Entry(viewModel.Procedimientos).State = EntityState.Modified;
db.Entry(viewModel.Programaciones).State = EntityState.Modified;
db.Entry(viewModel.Instalaciones).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Docente");
}
}
但要返回POST表单,该对象完全为空。 最后我提出了观点,我会稍微减少它,因为它已经足够长了问题
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
foreach (var item in Model.Proyectos)
{
<h3>@item.Titulo</h3>
@if (Model.Instalaciones != null)
{
foreach (var instalacion in Model.Instalaciones)
{
Nota: @Html.EditorFor(m => instalacion.HardwareNota, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => instalacion.HardwareNota, "", new { @class = "text-danger" })
Nota: @Html.EditorFor(m => instalacion.SoftwareNota, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => instalacion.SoftwareNota, "", new { @class = "text-danger" })
}
}
}
<input type="submit" value="Guardar Cambios" class="btn btn-success" />
}
我希望你能帮助我,谢谢!!