1

我是 Web 开发和 asp.net mvc 的新手,我正在尝试创建一个博客作为我的第一个项目。

现在,在博客中,每篇文章都有自己的页面(有点像 stackoverflow 为每个问题都有一个新页面)。但我很难理解我将如何实现这一目标。

因为例如每个新页面都必须有自己的视图和自己的操作方法。现在假设如果有 1000 篇博文,这意味着控制器中有 1000 个视图和 1000 个动作是动态创建的。

肯定还有别的办法。在这个问题上的一点指导会很有帮助。

4

2 回答 2

2

您将只有一个操作和一个视图,但针对不同的博客文章有不同的数据(视图模型)。因此,例如,假设您为博客文章声明了一条特殊路线:

routes.MapRoute(
    "BlogPostDetails",
    "posts/{id}/{title}",
    new { controller = "Posts", action = "Details" }
);

在这里,我指定了一个额外的 URL 参数,称为title使 URL 对 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>

希望这可以为您澄清一些事情。

于 2013-03-16T11:34:52.153 回答
1

您的操作方法将有一个参数来标识实际的博客文章。

例如:

/post/view/123

将查看 ID 为 123 的博客文章。您对 PostController 的操作如下所示

ViewResult View(int postId){
    //get from db, return appropriate content via view here
}

因此,您只需要一个控制器和本示例中的一个操作即可完成所有这些操作。只是参数变化。

于 2013-03-16T11:15:51.147 回答