【问题标题】:How to retrieve a Tags from database?如何从数据库中检索标签?
【发布时间】:2016-02-13 12:27:03
【问题描述】:

我正在尝试在我的视图中从数据库中检索标签并将其显示在 post 中。但我不知道我怎么能做到这一点..

这是我的控制器:

 public async Task<ActionResult> Create(Book model)
    {
        if (ModelState.IsValid)
        {

                            if(model.TagsListing != null)
            {
                Collection<Tag> postTags = new Collection<Tag>();
                var s = model.TagsListing.ToString();
                string[] newTags = s.Split(',');

                foreach (var val in newTags)
                {
                    Tag iTag = new Tag
                    {
                        Name = val
                    };
                    db.Tags.Add(iTag);
                    postTags.Add(iTag);
                }

                model.Tags = postTags;
            }


            db.Books.Add(model);
            await db.SaveChangesAsync();
            return RedirectToAction("Index");
        }

            ViewBag.User_ID = new SelectList(db.AspNetUsers, "Id", "Email");
            ViewBag.Category_id = new SelectList(db.Categories, "Category_id", "Category_name");


        return View(model);

    }

这是我的数据库的几张图片:

BookTag

Tag

http://i.stack.imgur.com/hegxd.png

我只想检索与帖子相关的标签并在帖子视图中显示它们。

【问题讨论】:

  • 您尝试使用哪种操作方法。你有什么问题?
  • 我没问题,有方法.. 只是我附加了创建控制器让你知道我是如何将标签保存在我的数据库中的,现在我只想从数据库中检索它们并显示相关的标签到帖子查看页面中的帖子@Shyju
  • 您需要一个 GET 操作来查询您的表并将数据传递到您将在其中显示它的视图。
  • 我应该查询哪个表??因为我已经有一个标签处理程序,它在书表中保存一串标签,而且我还有一个书本标签表,它在书和标签之间链接但无法访问它.. ??
  • 你说的但不能访问是什么意思?您是否尝试了一些代码从表中读取并收到“权限被拒绝/未授权”错误?

标签: asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

假设您有一个视图模型来显示图书详细信息和标签列表

public class BookDetailVm
{
  public int BookId { set;get;}
  public string Name { set;get;}
  public List<TagVm> Tags { set;get;}
  public BookDetailVm()
  {
    this.Tags = new List<TagVm>();
  }
}
public class TagVm
{
  public int Id { set;get;}  
  public string Name { set;get;}
}

在您的 GET 操作中,读取 Book 实体及其 Tags 集合属性,将其映射到 BookDetailVm 的实例并将其传递给您的视图。

public ActionResult View(int id)
{
    var bookVm = new BookDetailVm();
    using (var db = new YourDbContext())
    {
        var book = db.Books.FirstOrDefault(s=>s.Id==id);
        if (book != null)
        {
            bookVm.BookId = book.Id;
            bookVm.Name = book.Name;
            if (book.Tags != null)
            {
                bookVm.Tags = book.Tags
                                  .Select(b => new TagVm {Id = b.Id, Name = b.Name})
                                  .ToList();
            }            
        }            
   }
   return View(bookVm);
}

你的观点是强类型到我们的BookdDetailVm

@model BookDetailVm
<h2>@Model.Name</h2>
<h3>Tags</h3>
@foreach(var t in Model.Tags)
{
  <p>@t.Id</p>
  <p>@t.Name</p>
}

【讨论】:

  • 看看这里,这是 int 类型的方法返回 pdf 文件的页数,我只是没能从视图中调用它,如果你也能帮忙,谢谢i.imgur.com/rHhqPEM.png
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多