我是Web开发和asp.net mvc的新手,我正在尝试创建一个博客作为我的第一个项目。
现在,在博客中,每个帖子都有自己的页面(有点像stackoverflow,每个问题都有一个新页面)。但我很难理解我将如何实现这一目标。
因为例如每个新页面都必须有自己的视图和自己的操作方法。现在假设有1000个博客文章意味着动态创建控制器中的1000个视图和1000个动作。
当然必须有其他方法。在这个问题上的一点指导会有所帮助。
答案 0 :(得分:2)
您将只有一个操作和一个视图,但不同的博客帖子有不同的数据(视图模型)。因此,举例来说,假设您为自己的博客帖子声明了一条特殊路线:
routes.MapRoute(
"BlogPostDetails",
"posts/{id}/{title}",
new { controller = "Posts", action = "Details" }
);
这里我指定了一个名为title
的附加网址参数,以使网址更具SEO性(例如“/ posts / 1 / Hello%20world”)。
接下来是定义模型和控制器:
// /Models/BlogPost.cs
public class BlogPost
{
public string Heading { get; set; }
public string Text { get; set; }
}
// /Controllers/PostsController
public class PostsController : Controller
{
public ActionResult Details(string id)
{
BlogPost model = GetModel(id);
if (model == null)
return new HttpNotFoundResult();
return View(model);
}
private BlogPost GetModel(string blogPostId)
{
// Getting blog post with the given Id from the database
}
}
最后,您的视图(/Views/Posts/Details.cshtml)应如下所示:
@model [Root namespace].Models.BlogPost;
<article>
<h2>@Model.Heading</h2>
<p>@Model.Text</p>
</article>
希望这能为你澄清一些事情。
答案 1 :(得分:1)
您的操作方法会有一个参数来标识实际的博文。
例如:
/post/view/123
会查看ID为123的博文。您对PostController的操作看起来像
ViewResult View(int postId){
//get from db, return appropriate content via view here
}
所以你只需要一个控制器,在这个例子中有一个动作就可以做到这一切。只是参数更改。