這是我的控制器:如何通過標籤列表,匿名函數
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異常。 請給我建議,我應該在這裏嘗試。
您已經添加了新的'Tag'收集到'POST'但只設置了'TagId'屬性,而不是'TagName'屬性使得'post.Tags.Select(t => t.TagName)'不會返回任何值。 –
okk,非常好,tagId我已添加回到數據庫,但我想要返回tagName所以我應該創建一個新的變量和存儲標記名在那裏,然後訪問它,我已經試過,但沒有完成它。如果我說得對,那麼該怎麼做。如果我錯了,那麼任何其他方式來取回標記名@StephenMuecke – neo
我已經在問題中最後添加了如何嘗試將標記名放入一個變量,然後嘗試傳遞給匿名函數,請看看先生@StephenMuecke – neo