私は私のデータベースのすべてのスレッドをレイアウトするインデックスと呼ばれるビューがあります。そのビューの中でスレッドのすべてのコメントを読み込んでいます。新しいコメントを作成するはずのフォームを呼び出すと、モデルの状態が無効であることがわかります。それはタイプ文字列からタイプのプロフィール、コメント、またはタグに変換できないことを私に伝えます。もともと私は私のコードとしてこれを持っていた:モデルの状態が無効
public ActionResult AddComment(Thread thread, string commentBody)
{
if (ModelState.IsValid)
{
_repository.AddComment(thread, comment);
TempData["Message"] = "Your comment was added.";
return RedirectToAction("Index");
}
その後、私はこれにそれを変更:
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");
}
をこれはまだ私のモデル状態が無効であることを私に伝えます。どのようにして状態を変えようとしないのですか?
もここでこのアクションを呼び出すために使用されている形態である。MOD上記のコードの例で
@using(Html.BeginForm("AddComment", "Thread", mod))
{
<input type="text" name="AddComment" id="text" />
<input type="submit" value="Save"/>
}
スレッドであるモデルです。ここで要求された としては、糸の内側にすべてです:
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; }
そして最後にコメントクラス:
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; }
}
あなたは 'Thread'オブジェクトの外観を表示する必要があります。 – RPM1984
だからモデルステートチェックを外して、それが機能するかどうかを調べようとしました。今私はこのエラーが発生します: "エンティティオブジェクトは、IEntityChangeTrackerの複数のインスタンスによって参照することはできません。 –
今、あなたはEntity Frameworkについて話しています。あなたはより多くの情報を提供する必要があります。 '_repository.AddComment(スレッド、コメント)'とは何ですか?既存のスレッドをThreadIdでフェッチし、 'thread.Comments.Add(newComment);を実行してからスレッドを保存するだけです。それはそれであるはずです。 – RPM1984