学用MVC4做网站五:5.7显示文章
前面做好了浏览文章目录,现在开始做显示文章内容。
打开CommonModelController,添加一个Index(int id) action。action中先查找指定Id的内容是否存在。存在就返回视图;不存在返回错误页面。
/// <summary> /// 显示内容 /// </summary> /// <param name="id">公共模型Id</param> public ActionResult Index(int id) { var _cModel = cModelRsy.Find(id); if (_cModel == null) { Error _e = new Error { Title = "内容不存在", Details = "未能从数据库中找到指定的内容!", Cause = "该内容已经被删除。", Solution = Server.UrlEncode("<li>返回<a href='" + Url.Action("Index", "Home") + "'>网站首页</a>。</li>") }; return RedirectToAction("ManageError", "Prompt", _e); } return View(_cModel.Category.ContentView,_cModel); }
右键添加视图。
@model Ninesky.Models.CommonModel @{ ViewBag.Title = Model.Title + "—" + Model.Category.Name; Layout = "~/Views/Shared/_Layout.cshtml"; } <div class="banner"> <img src="~/Content/Default/Images/banner.jpg" /> </div> <div class="left"> <div class="children"> <dl> <dt>@Model.Category.Name</dt> <dd>@Html.Action("PartialChildren", "Category", new { id = Model.CategoryId })</dd> </dl> </div> </div> <div class="content_cnt"> <div class="path">@Html.Action("PartialPath", "Category", new { id = Model.CategoryId })>> 详细内容</div> <div class="content"> 这里是文章内容 </div> </div>
实际上就是从views/category/index.cshtml复制过来,稍微修改一下。关键是<div class="content"> …</div>,这个里面我计划用来显示文章内容。CommonModel里面只有文章的公共信息,没有具体内容,要从ArticleController中调用。
打开ArticleController,添加PartialDetail(int id, string view = "PartialDetail")action。从名字可以看出来这里是做显示分部视图用,id是公共模型id,view是视图名称,可以根据需要传递不同的视图名,默认为"PartialDetail"。
/// <summary> /// 文章内容 /// </summary> /// <param name="id">CommonModelId</param> /// <param name="view">视图</param> public PartialViewResult PartialDetail(int id, string view = "PartialDetail") { return PartialView(view, articleRsy.FindByCModelId(id)); }
右键添加分部视图
@model Ninesky.Models.Article <div class="title">@Model.CommonModel.Title</div> <div class="Info">来源:@Model.Source 作者:@Model.Author 发布时间:@Model.CommonModel.ReleaseDate.ToLongDateString() 阅读:@Model.CommonModel.Hits </div> <div class="text">@Html.Raw(Model.Content)</div>
视图的顶部显示标题,随后显示文章的基本信息,底部显示文章内容。文章内容一定要用@Html.Raw()用来显示HTML内容。如果直接写@Model.Content 显示出来会是HTML编码后的内容。
返回到CommonModel/index.chhtml视图将“这里是文章内容”替换为@Html.Action("PartialDetail", "Article", new { id = Model.CommonModelId })。
到这里就可以显示文章内容,但是文章内容的Url显示格式为“http://localhost:52270/CommonModel/Index/10” 这种格式看起来不是太友好。我希望url尽量短且好理解、好记。怎么办?改路由。
打开App_Start/RouteConfig.cs,在默认路由的上面加一条名称为“Item”的路由,url格式为"Items/{id}"。
routes.MapRoute( name: "Items", url: "Items/{id}", defaults: new { controller = "CommonModel", action = "Index", id = UrlParameter.Optional } );
这个url就比较顺眼了。“/CommonModel/Index/10”将会表示为“/Items/10”。
F5 浏览器中看下效果。
============================================
代码见:学用MVC4做网站五:文章
============================================
感谢您一直的关心和帮助,祝您新年快乐,合家欢乐!