Así que tengo una vista llamada índice que establece todos los hilos en mi base de datos. Luego, dentro de esa vista, estoy cargando todos los comentarios en los hilos. Cuando llamo a mi formulario que se supone que crea un nuevo comentario, siempre me dice que el estado de mi modelo no es válido. Me dice que no puede convertir de tipo cadena a tipo perfil o comentario o etiqueta. Originalmente, tenía esto como mi código:Estado del modelo no válido
public ActionResult AddComment(Thread thread, string commentBody)
{
if (ModelState.IsValid)
{
_repository.AddComment(thread, comment);
TempData["Message"] = "Your comment was added.";
return RedirectToAction("Index");
}
Entonces me cambiaron a esto:
public ActionResult AddComment(Thread thread, string commentBody)
{
Profile profile = _profileRepository.Profiles.FirstOrDefault(x => x.Id == thread.ProfileId);
Tag tag = _tagRepository.Tags.FirstOrDefault(t => t.Id == thread.TagId);
thread.ThreadTag = tag;
thread.Profile = profile;
Comment comment = new Comment()
{
CommentBody = commentBody,
ParentThread = thread
};
if (ModelState.IsValid)
{
_repository.AddComment(thread, comment);
TempData["Message"] = "Your comment was added.";
return RedirectToAction("Index");
}
Esto todavía me dice que mi modelo de estado no es válido. ¿Cómo lo obtengo para que no intente cambiar el estado?
También aquí es la forma que se utiliza para llamar a esta acción:
@using(Html.BeginForm("AddComment", "Thread", mod))
{
<input type="text" name="AddComment" id="text" />
<input type="submit" value="Save"/>
}
En el ejemplo de código anterior mod es el modelo que es un hilo. Y conforme a lo solicitado aquí es todo dentro de la rosca:
public Thread()
{
this.ChildComments = new HashSet<Comment>();
}
public int Id { get; set; }
public string TopicHeader { get; set; }
public string TopicBody { get; set; }
public Nullable<int> UpVotes { get; set; }
public Nullable<int> DownVotes { get; set; }
public int ProfileId { get; set; }
public int TagId { get; set; }
public virtual Profile Profile { get; set; }
public virtual ICollection<Comment> ChildComments { get; set; }
public virtual Tag ThreadTag { get; set; }
Y por último la clase comentario:
public partial class Comment
{
public int Id { get; set; }
public string CommentBody { get; set; }
public int UpVotes { get; set; }
public int DownVotes { get; set; }
public virtual Thread ParentThread { get; set; }
}
necesita mostrar el aspecto del objeto 'Thread'. – RPM1984
Así que traté de eliminar la verificación de modelo de estado y ver si funcionó. Ahora recibo este error: "Un objeto de entidad no puede ser referenciado por varias instancias de IEntityChangeTracker". –
bueno, ahora estás hablando de Entity Framework. Debes proporcionar más información. ¿Qué hace '_repository.AddComment (thread, comment)' hacer? Parece que todo lo que debe hacer es buscar el hilo existente por ThreadId, luego hacer 'thread.Comments.Add (newComment);' y luego guardar el hilo. eso debería ser. – RPM1984