强类型的HTML模板方法与直接显示模型
模型:
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 })">«</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 })">»</a></li>
}
</ul>
}
</div>
</div>
强类型的HTML模板方法与直接显示模型的更多相关文章
- Directx11教程(67) 显示模型文件
原文:Directx11教程(67) 显示模型文件 在前面的教程中,我们都是通过在ModelClass中直接产生顶点和索引数据,简单的三角形,立方体等等还好说,毕竟比较简单,如何显示复杂的 ...
- UGUI ScrollView中显示模型和特效
游戏开发中有时候会遇到在UI上显示模型和特效的需求,这次需要在ScrollView上显示.我们使用UGUI的Screen Space - Camera模式,修改模型和特效的layer使之显示在UI上面 ...
- 【Stage3D学习笔记续】真正的3D世界(二):显示模型
虽然我们进入真3D世界了,但是上一章的Demo仍然是显示的一个平面,尽管我们的平面在3D空间中旋转可以看出一点3D透视的效果,但是既然是真3D,就要拿出点3D的样子来! 如果要显示3D模型,我们就要告 ...
- 3D模型在UI上显示的方法(Unity)
方法:使用RawImage通过Render Texter将摄像机下的物体渲染纹理记录并显示在RawImage上面 具体实现:新建一个模型(Cube),新建一个摄像机,将Clear Flags设置为So ...
- OpenGl读取导入3D模型并且添加鼠标移动旋转显示
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543828.html 最近实习要用到opengl库就是跟opencv 有点像的那个,然后下了 ...
- [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型
[iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 作者:u0u0 - iTyran 在上一节中,我们分析了OBJ格式.OBJ格式优点是文本形式,可读 ...
- ASP.NET MVC3快速入门——第五节、从控制器访问模型中的数据
5.1 从控制器访问模型中的数据在本节中,我们将创建一个新的MoviesController类,并且书写代码来获取数据库中的数据,并通过视图模板来显示在浏览器中.鼠标右击Controller文件夹,点 ...
- Asp.net MVC4高级编程学习笔记-模型学习第五课MVC表单和HTML辅助方法20171101
MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method ...
- ASP.NET MVC模型绑定1
一.模型绑定原理 模型绑定是指为Controller的Action方法的参数提供值的过程,例如我有一个名为Blog的实体类(准确的说是ViewModel),它有一个名为Title的属性,如果我在VIE ...
随机推荐
- gridview读取Excel文件中的数据,并将其导入数据库
原文发布时间为:2008-10-16 -- 来源于本人的百度文章 [由搬家工具导入] //将需要导入的文件上传到服务器 string filePath = "" ...
- C++动态特性和C++对象模型——《高质量程序设计12章》
1.动态特性 静态特性和动态特性,编译时和运行时 虚函数 (1)虚函数的叫覆盖,虚函数不是实现多态的唯一手段(其他语言也可能采用别的方法). 抽象基类: (1)如果将基类的虚函数声明为纯虚函数,则基类 ...
- DatePickerDialog
package com.pingyijinren.helloworld.activity; import android.app.DatePickerDialog; import android.su ...
- poj1308+HOJ1325,判断是否为树
POJ 应该是判断是否为简单无环连通图,用并查集直接秒杀即可,而HOJ的是有向树,还需判断所有点的入度必需小于2,用一个类似hash[]数组判断一下即可, ////判断树之一:入度<=1:三:点 ...
- redis 实际应用中的缓存作用(转)
有人说互联网用户是用脚投票的,这句话其实也从侧面说明了,用户体验是多么的重要:这就要求在软件架构设计时,不但要注重可靠性.安全性.可扩展性以及可维护性等等的一些指标,更要注重用户的体验,用户体验分很多 ...
- Spring Boot中验证码实现kaptcha
要生成验证码网上的方案比较多,基本是基于两大类:1为自定义生成,操作用Image类,2为kaptcha生成,有模糊算法. 当然也可以直接交由前端进行处理 1.基于kaptcha 首先不要怀疑的是报名是 ...
- 从Java代码到字节码
http://www.importnew.com/13107.html http://blog.csdn.net/dc_726/article/details/7944154/ http://www. ...
- 【转】海量数据处理算法-Bloom Filter
1. Bloom-Filter算法简介 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.它是一个判断元素是否存在于 ...
- C++设计模式之适配器模式(二)
3.Socket网络通信的设计与实现------类适配器 除了对象适配器模式之外.适配器模式另一种形式.那就是类适配器模式,类适配器模式和对象适配器模式最大的差别在于适配器和适配者之间的关系不同,对象 ...
- 【转】Web Worker javascript多线程编程(一)
原文:https://www.cnblogs.com/peakleo/p/6218823.html -------------------------------------------------- ...