这是我的控制者:
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);
}
但是,数据已正确插入数据库,但此ret var正在提供System.NullReferenceException。导致问题的行是TagName,它应返回逗号分隔值。
如果我尝试这样的东西,那么它工作正常但它不会返回最后插入的帖子。意味着如果在数据库中,已有7个帖子,并且在此新插入之后,则总数为。 post的数量增加到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)),
现在,我应该如何修改此匿名函数,以便动态附加与每个帖子相关的标记。
实际上,有一个带有多选下拉列表的文本框。文本框和下拉列表中的所有值都会转到此控制器,但在提交按钮后,应将最新提交的帖子添加到页面中。但是这个匿名函数导致了错误。它应该将正确的数据传递给敲除绑定,但代码卡在这里。我确定这里没有与敲除相关。
我还尝试将变量与所有选定的标签放在一起,然后将其分配给TagName,如下所示:
var result = post.Tags.SelectMany(e => e.TagName);
// and in ret var,
TagName = string.Join(",", result)
但仍然得到NullReferenceException。 请建议我在这里尝试一下。
答案 0 :(得分:1)
您必须在创建标记的位置设置TagName的值:
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);
}