我正试图找出一种方法来做这个简单的博客。我有一个首页,其中列出了所有博客帖子,当您点击博客帖子的标题时,您输入整个帖子,您可以在其中发表评论。
我的问题是,当我尝试通过控制器传递模型时,我只能访问我的一个模型,无论是帖子还是评论。
这是我的模特:
public class Post
{
public int ID { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public string Author { get; set; }
public DateTime DateTime { get; set; }
public List<Comment> Comments { get; set; }
}
public class Comment
{
public int ID { get; set; }
public int PostID { get; set; }
public string Message { get; set; }
public string Author { get; set; }
public DateTime DateTime { get; set; }
}
这是我的控制器:
public ActionResult Details(int id)
{
**var dbPosts = db.Posts.Find(id);**
return View(dbPosts);
}
以下是我的观点:
@model Blog.Models.Post
@{
ViewBag.Title = "Details";
}
<h2>@Html.ActionLink(Model.Title, "Details", new { id = Model.ID (@Html.ActionLink("Rediger", "Edit", new { id = Model.ID }) - @Html.ActionLink("Slet", "Delete", new { id = Model.ID }))</h2>
<span class="written">skrevet d. @Model.DateTime.ToLongDateString() @Model.DateTime.ToShortTimeString() af @Model.Author</span>
<p>@Model.Message</p>
<hr />
@foreach (var comment in Model.Comments) {
<span class="written">skrevet d. @comment.DateTime.ToLongDateString() @comment.DateTime.ToShortTimeString() af @comment.Author</span>
<p>@comment.Message</p>
<hr />
}
@using (Html.BeginForm()) {
<label for="Author">Author</label>
<input type="text" id="Author" name="Author" />
<label for="Message">Message</label>
<textarea id="Message" name="Message"></textarea>
<input type="submit" value="Gem" />
<input type="reset" value="Reset" />
}
我用星星标记的东西是我认为它出错的地方..我需要通过此详细信息视图传递我的帖子和评论模型。我的问题是,我该怎么做?
我不想尝试学习任何高级技术。
亲切的问候和提前谢谢。
答案 0 :(得分:1)
您必须使用模型将db中的数据映射到:
public ActionResult Details(int id)
{
var model = db.Posts.Where(x => x.Id == id).Select(x => new Post(){
ID = x.Id,
Title = x.Title,
Message = x.Message
}).FirstOrDefault();
if (model != null)
{
model.Comments = db.Comments.Where(x => x.PostId == model.ID).Select(x => new Comment(){
ID = x.Id,
PostId = model.ID,
Message = x.Message
}).ToList();
return View(model);
}
else
{
// post not found
return View("NotFoundError");
}
}
答案 1 :(得分:1)
你也可以通过ViewData传递它,比如
public ActionResult Details(int id)
{
var dbPosts = db.Posts.Find(id);
// somtthing like that
var dbComments = db.Comments.Find(dbPost.ID);
ViewData["KEY_TO_COMMENTS"] = dbComments;
return View(dbPosts);
}
然后你可以在你的视图中访问你的纪念品......
@var comments = ViewData["KEY_TO_COMMENTS"] as Blog.Models.Comments;
希望这有助于......:)