zoukankan      html  css  js  c++  java
  • 学用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 浏览器中看下效果。

    image

    ============================================

    代码见:学用MVC4做网站五:文章

    ============================================

    感谢您一直的关心和帮助,祝您新年快乐,合家欢乐!

  • 相关阅读:
    爬虫笔记1
    python逐行读取文件&作成xml文件
    C#.NET自定义下拉框实现选中下拉list的值和显示框内的值不同
    Mongodb笔记
    tomcat启动脚本
    mysql相关函数
    关于SQL_Errno1677导致主从复制中断处理
    mysql慢查询日志切换
    mysql5.7 忘记root密码处理
    Python零基础入门(4)-------简单了解Python是怎么运行
  • 原文地址:https://www.cnblogs.com/mzwhj/p/2893160.html
Copyright © 2011-2022 走看看