2012-03-08 39 views
9

Vì vậy, tôi có một chế độ xem được gọi là chỉ mục đưa ra tất cả các chuỗi trong cơ sở dữ liệu của tôi. Sau đó, bên trong cái nhìn đó tôi đang tải tất cả các ý kiến ​​về các chủ đề. Khi tôi gọi vào biểu mẫu của tôi được cho là tạo một chú thích mới, nó vẫn nói với tôi rằng trạng thái mô hình của tôi không hợp lệ. Nó cho tôi biết rằng nó không thể chuyển đổi từ chuỗi kiểu để nhập hồ sơ hoặc nhận xét hoặc thẻ. Ban đầu tôi đã có điều này là mã của tôi:Trạng thái mô hình không hợp lệ

public ActionResult AddComment(Thread thread, string commentBody) 
    { 
     if (ModelState.IsValid) 
     { 
      _repository.AddComment(thread, comment); 
      TempData["Message"] = "Your comment was added."; 
      return RedirectToAction("Index"); 
     } 

Sau đó, tôi đã thay đổi nó như thế này:

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"); 
     } 

này vẫn nói với tôi rằng tình trạng mô hình của tôi không hợp lệ. Làm thế nào để tôi có được nó để nó không cố gắng thay đổi trạng thái?

Ngoài ra ở đây là hình thức đang được sử dụng để gọi hành động này:

@using(Html.BeginForm("AddComment", "Thread", mod)) 
      { 
       <input type="text" name="AddComment" id="text" /> 
       <input type="submit" value="Save"/> 
      } 

Trong trường hợp của mã trên mod là mô hình mà là một chủ đề. Và theo yêu cầu ở đây là tất cả mọi thứ bên trong chủ đề:

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; } 

Và cuối cùng là nhận xét về lớp:

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; } 
} 
+0

bạn cần hiển thị đối tượng 'Chủ đề' trông như thế nào. – RPM1984

+0

Vì vậy, tôi đã cố gắng để loại bỏ kiểm tra mô hình và xem nếu điều đó làm việc. Bây giờ tôi nhận được lỗi này: "Một đối tượng thực thể không thể được tham chiếu bởi nhiều trường hợp của IEntityChangeTracker." –

+0

bây giờ bạn đang nói về khung Entity. Bạn cần cung cấp thêm thông tin. '_repository.AddComment (thread, comment)' làm gì? Có vẻ như tất cả những gì bạn cần làm là tìm chuỗi hiện có bằng ThreadId, sau đó thực hiện 'thread.Comments.Add (newComment);' sau đó lưu chuỗi. nên là nó. – RPM1984

Trả lời

23

Sử dụng mã dưới đây để lặp qua các sai sót. Sau đó, bạn có thể xem trường nào và đối tượng nào đang thất bại khi xác thực. Và sau đó bạn có thể đi từ đó. Chỉ cần nhìn vào tài sản IsValid sẽ không cung cấp đủ thông tin.

var errors = ModelState.Values.SelectMany(v => v.Errors); 

Và sau đó lặp qua các lỗi.

0

Trước khi kiểm tra lỗi, bạn cần biết lý do trạng thái mô hình không hợp lệ. Bạn có thể dễ dàng làm điều đó bằng cách gỡ lỗi và xem danh sách lỗi.

Lỗi thứ hai phải là một câu hỏi riêng biệt như tôi tin được viết trong nguyên tắc ngăn xếp.

Các vấn đề liên quan