回发

时间:2015-05-18 11:46:35

标签: c# asp.net mvvm

您好我一直在寻找这个问题的解决方案,但我没有运气。使用我的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" /> 
}

我希望你能帮助我,谢谢!!

0 个答案:

没有答案