2016-05-29 4 views
0

私はDesafio(チャレンジ)とTagモデルとの多対多の関係をしようとしていますが、チャレンジには多くのタグがあり、タグは多くの課題に関連しています。多値多数null

var DesafioTag = new HashSet<int>(
     desafio.Tags.Select(a => a.Id)); 

は私がやった方法を紹介します:ビュー上のタグは、問題は、私は、フォームを送信すると、それは価値がこの行のnullであると言うです

私のモデル

タグ

public class Tag 
{ 
    public int Id { get; set; } 
    public string NomeTag { get; set; } 
    public string cor { get; set; } 
    public virtual ICollection<ApplicationUser> Users { get; set; } 
    public virtual ICollection<Desafio> Desafios { get; set; } 
} 

Desafio(チャレンジ)

public class Desafio 
{ 
    public int DesafioId { get; set; } 

    public string TipoTrabalho { get; set; } 

    public virtual ApplicationUser User { get; set; } 

    public string ApplicationUserId { get; set; } 

    public string Descricao { get; set; } 
    public int TipoAvaliacaoId { get; set; } 
    public virtual TipoAvaliacao TipoAvaliacao { get; set; }  
    public decimal valor { get; set; } 
    public int Visualizacoes { get; set; } 
    public DateTime DataCriacao { get; set; } 
    public decimal lat { get; set; } 
    public decimal lon { get; set; } 
    public int IdSolucaoVencedora { get; set; } 
    public virtual ICollection<Tag> Tags { get; set; } 

} 

それから私は、ビューのデータを表示するための2つのviewmodels

DesafioCreate

public class DesafioCreate 
{ 
    public string Desafio { get; set; } 
    public string Descricao { get; set; } 
    public decimal ValorMonetario { get; set; } 
    public decimal lat { get; set; } 
    public decimal lon { get; set; } 
    public ICollection<TagDesafio> TagDesafio { get; set; } 
} 

public class TagDesafio 
{ 
    public int TagId { get; set; } 
    public string Nome { get; set; } 
    public bool Seleccionado { get; set; } 
} 
012を持っています

私は既に多くの関係を編集するために何かをしていましたが、私はそれを行いましたが、作成方法ではうまくいかず、私の挑戦と関係があります。誰かが私に手を与えることができる場合は存在しませんが、原因はここには、私が思うのポストコードで、ということであれば、私は知らないの挑戦はここ

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(DesafioCreate model, string[] selectedTag,HttpPostedFileBase file) 
    { 
     TipoAvaliacao TipoAvaliacao = db.TiposAvaliacao.Where(i => i.TipoAvaliacaoId == 1).FirstOrDefault(); 

     if (ModelState.IsValid) 
     { 
      Desafio desafio = new Desafio(); 
      desafio.lat = model.lat; 
      desafio.lon = model.lon; 
      desafio.TipoTrabalho = model.Desafio; 
      desafio.Descricao = model.Descricao; 
      desafio.DataCriacao = DateTime.Now; 
      desafio.TipoAvaliacao = TipoAvaliacao; 
      desafio.valor = 22; 
      desafio.Visualizacoes = 34; 
      desafio.ApplicationUserId = User.Identity.GetUserId(); 


      var fileName = Path.GetFileName(file.FileName); 
        var path = Path.Combine(Server.MapPath("~/Anexos"), fileName); 
        var anexo = new Anexo(); 
        anexo.Caminho = path; 
        anexo.NomeFicheiro = fileName; 
        anexo.DesafioId = desafio.DesafioId; 

       db.Desafios.Add(desafio); 

      atualizarTagsDesafio(desafio, selectedTag); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     preencherTagDesafio(); 
     return View(model); 
    } 

    private void atualizarTagsDesafio(Desafio desafio, 


string[] selectedTag) 
     { 
      if (selectedTag == null) 
      { 
       desafio.Tags = new List<Tag>(); 
       return; 
      } 
      var selectedAutoresHS = new HashSet<string>(selectedTag); 
      var DesafioTag = new HashSet<int>(// line that cause the error 
      desafio.Tags.Select(a => a.Id)); // line that cause the error 
      var Tags = db.Tags; 
      foreach (var tag in Tags) 
      { 
       if (selectedAutoresHS.Contains(tag.Id.ToString())) 
       { 
        if (!DesafioTag.Contains(tag.Id)) 
        { 
         desafio.Tags.Add(tag); 
        } 
       } 
       else { 

        if (DesafioTag.Contains(tag.Id)) 
        { 
         desafio.Tags.Remove(tag); 
        } 
       } 
      } 
     } 

主な問題であり、私はこの関係をしている初心者です、そして、私は問題を見つけることができません。

シモンズ:私の悪い英語

のようなあなたのビューに見えるん何

答えて

0

のため申し訳ありません。 [MVC Form not able to post List of objects

: ものmodelbinderのリスト/コレクションを提出するために 以上用など

チェックこの投稿を "TagDesafio [0] .TagIdは、TagDesafio 1は.TagId" のようなidを持つHTML要素をしたいです

[2]: MVC Form not able to post List of objects

がより密接にあなたのコードを調べた後、答えを更新しました。

新しいDesafioを作成し、それをdb-contextに追加しています。次に、関連するタグにアクセスしようとします。遅延読み込みが有効になっているか、タグコレクションを明示的に読み込むようにしてください。

ロード関連企業のドキュメントをチェックアウト:https://msdn.microsoft.com/en-us/data/jj574232.aspx

また、この場合には、あなたがemtptyタグコレクションにDesafioオブジェクトをインスタンス化できます。

Desafio desafio = new Desafio(); 
desafio.Tags = new Collection<Tags>();