2016-01-19 21 views
0

這是我的控制器:如何通過標籤列表,匿名函數

public JsonResult PostFunction(Post post,IEnumerable<int> MultipleTags) 
    { 
     post.PostedBy = User.Identity.GetUserId<int>(); 
     post.PostedDate = DateTime.UtcNow; 
      foreach (var tagId in MultipleTags) 
      { 
       var tag = new Tag { TagId = tagId }; 
       db.Tags.Attach(tag); // this avoids duplicate tags 
       post.Tags.Add(tag); 
      } 
      db.Posts.Add(post); 
      db.SaveChanges(); 
      var usr = db.Users.FirstOrDefault(x => x.Id == post.PostedBy); 
       { 
       Message = post.Message, 
       // here, i am getting nothing but it should return back tagnames 
       TagName = string.Join(",", post.Tags.Select(t => t.TagName)), 
       PostedBy = post.PostedBy, 
       PostedByName = post.ApplicationUser.UserName, 
      }; 
      return Json(ret,JsonRequestBehavior.AllowGet); 
    } 

Howerever,數據正確插入入數據庫,但該變種RET是給System.NullReferenceException。引起問題的線是TagName,它應該返回逗號分隔的值。

如果我嘗試這樣的事情,那麼它工作正常,但它不會返回最後插入的帖子。意味着如果在數據庫中有7個帖子已經存在,並且在新的插入之後,總數不會超過。的帖子增加到8個,所以它應該返回所有8個,但它只返回7個帖子,不包括最新添加的。

var ret = from data in db.Posts.Include(x=> x.Tags) 
       .OrderByDescending(x => x.PostedDate).ToList()     
       select new 
        { 
         TagName = string.Join(",", data.Tags.Select(t => t.TagName)), 

現在,我應該如何修改這個匿名函數,以便它應該動態追加與每個崗位的標籤。

實際上,有一個帶有多選擇下拉的文本框。文本框和下拉列表中的所有值都會發送到此控制器,但在提交按鈕後,最新提交的帖子應添加到頁面中。但是這個匿名函數會導致錯誤。它應該傳遞正確的數據來敲除綁定,但代碼會卡在這裏。我確定這裏沒有任何關於knockout的事情。

我也試圖把一個變量與所有選定的標籤,然後將其指定爲標籤名這樣的:

var result = post.Tags.SelectMany(e => e.TagName); 
// and in ret var, 
TagName = string.Join(",", result) 

,但仍然得到NullReferenceException異常。 請給我建議,我應該在這裏嘗試。

+1

您已經添加了新的'Tag'收集到'POST'但只設置了'TagId'屬性,而不是'TagName'屬性使得'post.Tags.Select(t => t.TagName)'不會返回任何值。 –

+0

okk,非常好,tagId我已添加回到數據庫,但我想要返回tagName所以我應該創建一個新的變量和存儲標記名在那裏,然後訪問它,我已經試過,但沒有完成它。如果我說得對,那麼該怎麼做。如果我錯了,那麼任何其他方式來取回標記名@StephenMuecke – neo

+0

我已經在問題中最後添加了如何嘗試將標記名放入一個變量,然後嘗試傳遞給匿名函數,請看看先生@StephenMuecke – neo

回答

1

你,你創建的標籤來設置標記名的值:

foreach (var tagId in MultipleTags) 
      { 
       var tag = new Tag { TagId = tagId, TagName = "something" }; 
       db.Tags.Attach(tag); // this avoids duplicate tags 
       post.Tags.Add(tag); 
      } 
+0

okk讓我想出如何填充這個東西 – neo

+0

TagName = db.Tags.FirstOrDefault(x => x.TagName.Where(x => x.TagId == tagId))這樣的東西應該工作,但在哪裏方法沒有給TagId在這一點上選擇(x => x。)我應該嘗試什麼,任何你想建議@jvanrhyn – neo

+0

你期望在TagName中看到什麼? – jvanrhyn