模型:

public class Article
{

[Display(Name="文章")]
public string ArticleID { get; set; }

[Display(Name="栏目类别")]
public string CategoryID { get; set; }

[Display(Name="标题")]
[Required]
[StringLength(50)]
public string Title { get; set; }

[Display(Name="正文")]
[DataType(DataType.MultilineText)]
public string Content { get; set; }

[Display(Name = "作者")]
[StringLength(20)]
public string AuthorName { get; set; }

[Display(Name = "发表日期")]
[DataType(DataType.Date)]      
[DisplayFormat(DataFormatString="{0:yyyy-MM-dd}",ApplyFormatInEditMode=true)]     只有在视图中配合 @Html.DipspalyFor(a =>a.PostTime )  @Html.EdittorFor(a =>a.PostTime )

或者模型为IEnumrable<Articles> 遍历IEnumrable模型时 使用 @Html.DipspalyFor(modelItem =>a.PostTime )   才能真正引用到无数据模型,显示为日期格式。  如果在视图中仅仅使用article.PostTime 不会引用数据注解 ,还是会显示 时间
// [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}", ApplyFormatInEditMode = true)]
// [DataType(DataType.DateTime)]
//[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}", ApplyFormatInEditMode = true)]
public DateTime PostTime { get; set; }

[Display(Name="优先级")]
[Range(1,100,ErrorMessage="{0}必须在{1}到{2}之间")]
public int PriorOrder { get; set; }

[Display(Name="访问量")]
public int ClickCount { get; set; }

public virtual Category Category { get; set; }

public Article()
{
this.ArticleID = Guid.NewGuid().ToString();
}

控制器:

public ActionResult List(string categoryID,int? page)
{
if (string.IsNullOrEmpty(categoryID))
return new HttpNotFoundResult();

ViewBag.CategoryName = _categoryService.Find(c =>c.CategoryID == categoryID).CategoryName;
ViewBag.CategoryID = categoryID;

int pageNumber = page ?? 1;
ViewBag.page = pageNumber;
int recordPerPage = 20; //设置每一页记录数。
ViewBag.recordPerpage = recordPerPage;

int totalRecord = 0; //定义一个输出参数。其实这里给输出参数赋值为0,是没多大意义的。只是为了能够访问到这个变量名而已。输出参数就像引用参数一样,跟形参占用相同的内存空间,形参值改变了,输出参数值也变了。 输出参数是为了解决一个C#中一个函数只能返回一个值的问题,使用它能返回多个值。

var articleList = _articleService.FindPageListTwoOrder<int,DateTime>(pageNumber, recordPerPage, out totalRecord, a => a.CategoryID == categoryID,OrderType.Asc,a =>a.PriorOrder,OrderType.Desc, a => a.PostTime);
//var artileList = _articleService.FindAll().Where(a => a.CategoryID == categoryID).OrderBy(a =>a.PriorOrder).OrderByDescending(a =>a.PostTime);

ViewBag.totalRecord = totalRecord;
ViewBag.totalPage = (int)Math.Ceiling((double)totalRecord / (double)recordPerPage); //Math.Celling()向上取整函数。 同样,Math.Floor()向下取整函数。

return View(articleList.ToList());
}

视图:

@model IEnumerable<MajorConstruction.Models.Article>

@{
ViewBag.Title = "List";
}

<!-- 面包屑导航-->

@*<ol class="breadcrumb">
你当前的位置:
<li><a href="@Url.Action("Index","Home")"><span class="glyphicon glyphicon-home"> 首页</span></a></li>
<li class="active"><span class="glyphicon glyphicon-th-large"> @ViewBag.CategoryName</span></li>
</ol>
*@
<img src="~/Content/Images/chuangxingfazhan.jpg">
<div class="page-header"><h3><span class="label label-primary">@ViewBag.CategoryName</span></h3></div>

<div class="row">
<div class="col-md-3">

@{Html.RenderAction("LeftSideMenu", "home", new { area = "", ActiveCategoryID = ViewBag.CategoryID });} <!--//返回一个导航菜单面板 ,通过链接的 RouteValue 传递一个参数数。-->

@{Html.RenderAction("ClickRangeOnCategory", "home", new { area = "", ActiveCategoryID = ViewBag.CategoryID });} <!--//返回一个本栏目的点击排行-->

</div>

<div class="col-md-9">
<table class="table table-hover table-striped">
@foreach (var article in Model)
{
<tr>
<td>
<a href="@Url.Action("ShowArticle", "Article", new { ArticleID = article.ArticleID, area = "" })"><span class="glyphicon glyphicon-file"> @article.Title</span></a>
</td>
<td>
@Html.DisplayFor(modelItem =>article.PostTime)   //强类型的辅助方法会引用模型类的数据注解,显示成日期格式。如果此时使用 @article.PostTime 而不是使用DisplayFor强类型的辅助方法,还是会显示日期时间格式。而不是仅有日期格式。
</td>
</tr>

}
<tfoot>
<tr>
<td class="text-muted" colspan="3">
每页 @ViewBag.recordPerPage 条记录,共有 @ViewBag.totalRecord 条记录。 第 @(ViewBag.totalRecord == 0 ? 0 : ViewBag.page) 页 ,共 @ViewBag.totalPage 页 @*如果查询到的记录数为0,就显示为第0页。这里有一个条件表达式的目的是为了避免 如 第1页,共0页。的情况。*@
</td>

</tr>
</tfoot>
</table>

@if (ViewBag.totalRecord != 0) //是为了避免出现没有记录,还是显示下一页的符号链接。这将会造成程序的一个bug,可以一址点下一页的符号,但是会没有记录。
{
<ul class="pagination">
@if (ViewBag.page != 1) //如果当前页面不是第1页,就显示 <<上一页的符号链接。当前页面是第1页,就不显示<<了。
{
<li><a href="@Url.Action("List", new { categoryID=ViewBag.CategoryID, page = (int)(ViewBag.page) - 1 })">&laquo;</a></li> @*为了保证分页与筛选功能的一致性,所以在链接中增加了路由参数。并将当前值通过ViewBag回传给各个输入表单字段。*@
}

@for (int page = 1; page <= (int)@ViewBag.totalPage; page++)
{
string activeCss = page == (int)ViewBag.page ? "active" : null;
<li class="@activeCss"><a href="@Url.Action("List", new { categoryID = ViewBag.CategoryID, page = page })">@page</a></li>

}
@if (ViewBag.page != ViewBag.totalPage) //如果当前页面不是最后一页了,就显示 >>下一页的符号链接。当前页面是最后一页,就不显示>>了。
{
<li><a href="@Url.Action("List", new { categoryID = ViewBag.CategoryID, page = (int)(ViewBag.page) + 1 })">&raquo;</a></li>
}

</ul>
}

</div>
</div>

强类型的HTML模板方法与直接显示模型的更多相关文章

  1. Directx11教程(67) 显示模型文件

    原文:Directx11教程(67) 显示模型文件       在前面的教程中,我们都是通过在ModelClass中直接产生顶点和索引数据,简单的三角形,立方体等等还好说,毕竟比较简单,如何显示复杂的 ...

  2. UGUI ScrollView中显示模型和特效

    游戏开发中有时候会遇到在UI上显示模型和特效的需求,这次需要在ScrollView上显示.我们使用UGUI的Screen Space - Camera模式,修改模型和特效的layer使之显示在UI上面 ...

  3. 【Stage3D学习笔记续】真正的3D世界(二):显示模型

    虽然我们进入真3D世界了,但是上一章的Demo仍然是显示的一个平面,尽管我们的平面在3D空间中旋转可以看出一点3D透视的效果,但是既然是真3D,就要拿出点3D的样子来! 如果要显示3D模型,我们就要告 ...

  4. 3D模型在UI上显示的方法(Unity)

    方法:使用RawImage通过Render Texter将摄像机下的物体渲染纹理记录并显示在RawImage上面 具体实现:新建一个模型(Cube),新建一个摄像机,将Clear Flags设置为So ...

  5. OpenGl读取导入3D模型并且添加鼠标移动旋转显示

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543828.html 最近实习要用到opengl库就是跟opencv 有点像的那个,然后下了 ...

  6. [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型

    [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 作者:u0u0 - iTyran 在上一节中,我们分析了OBJ格式.OBJ格式优点是文本形式,可读 ...

  7. ASP.NET MVC3快速入门——第五节、从控制器访问模型中的数据

    5.1 从控制器访问模型中的数据在本节中,我们将创建一个新的MoviesController类,并且书写代码来获取数据库中的数据,并通过视图模板来显示在浏览器中.鼠标右击Controller文件夹,点 ...

  8. Asp.net MVC4高级编程学习笔记-模型学习第五课MVC表单和HTML辅助方法20171101

    MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method ...

  9. ASP.NET MVC模型绑定1

    一.模型绑定原理 模型绑定是指为Controller的Action方法的参数提供值的过程,例如我有一个名为Blog的实体类(准确的说是ViewModel),它有一个名为Title的属性,如果我在VIE ...

随机推荐

  1. hdu 1043 A*

    http://www.cnblogs.com/183zyz/archive/2011/08/12/2135827.html #include<stdio.h> #define N 3630 ...

  2. UVA12103 贪心+置换

    题意:给出26个大写字母的置换B,问是否存在一个置换A,舍得A^2=B,如果存在输出Yes,否则输出No 题解: 研究一下置换A与A^2关系. 假设A=(a1 a2 a3)(b1 b2 b3 b4) ...

  3. 解决Flex4在Module里调用PopUpManager报错问题

    项目大了 就需要用到Module, 发现在一个Module里边, 和普通应用里一样popup一个组件的时候, 总是会报错. 这个在Flex3的时候也会出现, 会报样式错误 所以就想到了addPopUp ...

  4. CSS介绍&选择器&选择器优先级

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 '''se ...

  5. Markdown编辑器及语法

    dillinger 漂亮强大,支持md, html, pdf 文件导出.支持dropbox, onedrive,google drive, github. 来自国外,可能不够稳定. MaHua 小众软 ...

  6. 【TFS 2017 CI/CD系列 - 02】-- Build篇

    .创建Build 登录TFS,在现有的[Projects]中选择一个需要要创建Build的Project,点击[Build & Release]跳转页面 在新页面中选择[Builds]选项卡, ...

  7. vue-alioss-组件封装

    <template> <div class="vui_alioss_upload"> <div @click="uloadImg()&quo ...

  8. asp.net core 集成JWT(一)

    [什么是JWT] JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT ...

  9. 创立一个站点的前前后后(起因,域名,云平台,备案,CDN等等)(1)

    起因 写完<完美软件开发:方法与逻辑>这书后,原本想继续写书的,可出来參加了些社区活动后,我发现我写的书大家评价还行.但事实上不太理解.而接下来想写的书更加抽象点.准备叫<管理的解析 ...

  10. 再谈用java实现Smtp发送邮件之Socket编程

    很多其它内容欢迎訪问个人站点   http://icodeyou.com 前几天利用Socket实现了用java语言搭建webserver,全程下来应该会对Socket这个东西已经使用的很熟悉了.尽管 ...