Asp.net mvc 4 Asp.net MVC4,创建一个简单的论坛

Asp.net mvc 4 Asp.net MVC4,创建一个简单的论坛,asp.net-mvc-4,Asp.net Mvc 4,我对asp net Mvc非常陌生,我正在尝试用MVC4创建一个简单的论坛。我可以创建和列出线程和帖子,但我似乎不知道如何将新帖子添加到现有的线程中。换句话说,我希望能够将多篇文章连接到特定的ThreadId 那么,实现这一点的最佳方法是什么呢?我是否应该将@ActionLink中的值传递给带有ThreadId值的PostController-Create方法?或者我可以在我的后置控制器中专门处理这个问题吗?非常感谢任何代码示例或提示 我有以下课程: public class Thread {

我对asp net Mvc非常陌生,我正在尝试用MVC4创建一个简单的论坛。我可以创建和列出线程和帖子,但我似乎不知道如何将新帖子添加到现有的线程中。换句话说,我希望能够将多篇文章连接到特定的
ThreadId

那么,实现这一点的最佳方法是什么呢?我是否应该将
@ActionLink
中的值传递给带有
ThreadId
值的
PostController-Create方法
?或者我可以在我的后置控制器中专门处理这个问题吗?非常感谢任何代码示例或提示

我有以下课程:

public class Thread
{
    public int ThreadId { get; set; }
    public DateTime ? PostDate { get; set; }
    public string ThreadText { get; set; }
    public string ThreadTitle { get; set; }
    public virtual UserProfile UserProfile { get; set; }

    public virtual ICollection<Post> Posts { get; set; }
}    

public class Post
{        
    public int PostId { get; set; }
    public string PostTitle { get; set;}
    public string PostText { get; set; }
    public DateTime ? PostDate { get; set; }
    public virtual UserProfile UserProfile { get; set; }

    public virtual Thread Thread { get; set; }
    [System.ComponentModel.DataAnnotations.Schema.ForeignKey("Thread")]
    public int ThreadId { get; set; }        
}
公共类线程
{
public int ThreadId{get;set;}
公共日期时间?PostDate{get;set;}
公共字符串ThreadText{get;set;}
公共字符串ThreadTitle{get;set;}
公共虚拟用户配置文件用户配置文件{get;set;}
公共虚拟ICollection Posts{get;set;}
}    
公营职位
{        
公共int PostId{get;set;}
公共字符串PostTitle{get;set;}
公共字符串PostText{get;set;}
公共日期时间?PostDate{get;set;}
公共虚拟用户配置文件用户配置文件{get;set;}
公共虚拟线程线程{get;set;}
[System.ComponentModel.DataAnnotations.Schema.ForeignKey(“线程”)]
public int ThreadId{get;set;}
}

有几种方法可以实现您的目标。这里我向您介绍一种使用强类型视图的方法

我假设您有一个名为ViewThreadDetail的视图,其中包含属于给定threadId的帖子列表,您也可以在其中提交新帖子

ThreadController.cs:

public class ThreadDetailViewModel
{
    public Thread Thread { get; set; }

    public Post NewPost { get; set; }
}

public ActionResult ViewThreadDetail(int id)
{
    // load thread from database
    var thread = new Thread(){ ThreadId = id, ThreadTitle = "ASP.Net MVC 4", Posts = new List<Post>()};
    // assign ThreadId of New Post
    var newPost = new Post() { PostTitle = "", PostText = "", ThreadId = id };

    return View(new ThreadDetailViewModel() { Thread = thread, NewPost = newPost });
}

有几种方法可以实现你想要的。这里我向您介绍一种使用强类型视图的方法

我假设您有一个名为ViewThreadDetail的视图,其中包含属于给定threadId的帖子列表,您也可以在其中提交新帖子

ThreadController.cs:

public class ThreadDetailViewModel
{
    public Thread Thread { get; set; }

    public Post NewPost { get; set; }
}

public ActionResult ViewThreadDetail(int id)
{
    // load thread from database
    var thread = new Thread(){ ThreadId = id, ThreadTitle = "ASP.Net MVC 4", Posts = new List<Post>()};
    // assign ThreadId of New Post
    var newPost = new Post() { PostTitle = "", PostText = "", ThreadId = id };

    return View(new ThreadDetailViewModel() { Thread = thread, NewPost = newPost });
}

感谢namkha87的快速回复,这对我帮助很大,我让它工作起来了。我在路上也学到了一些东西。不客气!请考虑接受这个答案,如果它是有用的:“我以为我得到了所有的工作,但显然我没有填充这个列表:<代码> POSIT=新的List[());
所以它不会在my ViewThreadDetail.cshtml中显示:
post.PostTitle
。不知道我做错了什么。根据我收集的信息,新线程对象应该有一个帖子列表。我正在通过ActionLink将一个
id=item.threadId
传递到此控制器。请阅读注释,这一行只是一个示例,帮助您了解,您必须从数据库加载线程。您可以使用实体框架来实现这一点,感谢您再次花时间帮助我。找到它并使用它加载线程:
var loadThread=db.Posts.Where(p=>p.ThreadId==p.thread.ThreadId)
Posts=new List(loadThread)
。感谢namkha87的快速回复,这对我帮助很大,我已经开始工作了。我在路上也学到了一些东西。不客气!请考虑接受这个答案,如果它是有用的:“我以为我得到了所有的工作,但显然我没有填充这个列表:<代码> POSIT=新的List[());
所以它不会在my ViewThreadDetail.cshtml中显示:
post.PostTitle
。不知道我做错了什么。根据我收集的信息,新线程对象应该有一个帖子列表。我正在通过ActionLink将一个
id=item.threadId
传递到此控制器。请阅读注释,这一行只是一个示例,帮助您了解,您必须从数据库加载线程。您可以使用实体框架来实现这一点,感谢您再次花时间帮助我。找到它并使用它加载线程:
var loadThread=db.Posts.Where(p=>p.ThreadId==p.thread.ThreadId)
Posts=新列表(加载线程)
@model MvcApplication1.Models.Post

@using(Html.BeginForm("Add", "Post"))
{
    @Html.LabelFor(a=>a.PostTitle);
    @Html.TextBoxFor(a => a.PostTitle);

    @Html.LabelFor(a => a.PostText);
    @Html.TextBoxFor(a => a.PostText);

    //A hidden field to store ThreadId
    @Html.HiddenFor(a => a.ThreadId);

    <button>Submit</button>
}
public ActionResult NewPost(Post newPost)
{
     return PartialView(newPost);
}

public ActionResult Add(Post newPost)
{
     // add new post to database and redirect to thread detail page
     return RedirectToAction("ViewThreadDetail", "Thread", new { id = newPost.ThreadId });
}