强类型的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 })">&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>

时间: 2024-10-09 15:50:01

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

UGUI ScrollView中显示模型和特效

游戏开发中有时候会遇到在UI上显示模型和特效的需求,这次需要在ScrollView上显示.我们使用UGUI的Screen Space - Camera模式,修改模型和特效的layer使之显示在UI上面,但是会遇到ScrollView的mask无法剔除模型和特效的问题. 解决思路:计算出ScrollView的显示矩形框的世界坐标和尺寸,传给模型和特效的shader,在shader里判断这个像素的世界坐标是否超过矩形框,来判断是否显示图像. C#代码部分: using System.Collecti

MapGIS 数据管理——数据管理与显示模型架构

在学习开发过程中模型架构的学习尤为重要,特别是GIS二次开发是与GIS原理的紧密结合,下面介绍一下MapGIS数据管理与显示的模型. (本模型较简单,适合初学者学习理解) 学习本模型可以先接触MapGIS的相关操作,其中MapGIS K9中数据管理与地图的管理和这个模型相同,对应MapGISK9的工具有地图编辑器,GDB企业管理器.MapGIS 10的使用的就是上述模型.对应工具产品为工作空间,Catalog数据管理等内容. 模型中大致分成两条线,在地里空间数据和地图文档. 从空间数据上理解,所

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

虽然我们进入真3D世界了,但是上一章的Demo仍然是显示的一个平面,尽管我们的平面在3D空间中旋转可以看出一点3D透视的效果,但是既然是真3D,就要拿出点3D的样子来! 如果要显示3D模型,我们就要告别直接使用代码编写顶点数据的时代了,想想上一节,平面的四边形手写顶点或许还过得去,但是如果手写一个立方体的8个顶点数据就有点难了吧,如果是显示更加复杂的形状呢? 要显示一个3D模型,就需要一个特定格式的3D模型文件,3D模型文件一般使用3D建模工具创建,美术完成建模后会将模型导出为特定格式的3D模型

在 ASP.NET Core 中向 Razor Pages 应用显示模型

以下是实现也一个asp.net core Razor Pages的基本步骤 1.定义模型元素 using System; using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } [DataType(DataType.Date)]

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

[iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 作者:u0u0 - iTyran 在上一节中,我们分析了OBJ格式.OBJ格式优点是文本形式,可读性好,缺点也很明显,计算机解析文本过程会比解析二进制文件慢很多.OBJ还有个问题是各种3D建模工具导出的布局格式还不太一样,face还有多边形(超过三边形),不利于在OpenGL ES里面加载. .3ds文件是OBJ的二进制形式,并且多很多信息.有一个C语言写的开源库可以用来加.3ds文件,这就是l

模型模板

前面的Html辅助器,如Html.CheckBoxFor和Html.TextBoxFor等,是明确指定了要使用的html元素.mvc框架支持另一种方法,叫做模板视图辅助器(Templated View Helper),在这样的辅助器中,指定想要显示或编辑的模型对象或属性,而让mvc框架去判断应该用什么样的html元素. 一.使用模板视图辅助器 1.为指定的模型属性生成html 使用模板视图辅助器,意味着我们不必考虑要指定用什么样的html元素来表现一个模型属性,而是只要说出想显示哪个属性,让mv

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

MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method属性值是get,如果看到表单没有写method属性那就是表示method是get方式提交.另外一种就是post方式. 当使用HTTP Get请求时,浏览器会提取表单中元素的name特性值及相应的value特性值放到查询字符串中.如:http://localhost?search?id=1 如果不想把

webGL3D模型的加载与使用

在3DMAX,MAYA等软件(这是一些三维编辑软件)中,可以制作出3D模型.这些模型可用于室内设计,三维影视,三维游戏等领域. 3D模型由顶点(vertex)组成,顶点之间连成三角形或四边形(在一个平面上),多个三角形或者四边形就能够组成复杂的立体模型. 如下图所示: 上图就是一辆汽车的3D模型(立体模型),因为是由一个个网格组成,所以,也叫其为网格模型. 最终目的是要讲解怎么将模型导入three.js中,让three.js能够显示模型.模型是由面组成,面分为三角形和四边形面.三角形和四边形面组

Opengl 导入3Dmax制作的.3ds模型 并显示出来

由于opengl并没有原始支持这种模型,所以导入是件麻烦事,但是又有很多的模型是这个格式的,这次在做图形学大作业的时候,特别想用到. 开始以为很简单,就几十行代码就能解决,但是翻了好多列子,都从解析文件格式,到分离顶点,纹理格式等等,非常复杂的工作,最后才能显示模型. 因此我把网上的列子总结成了2个文件,一个头文件和一个CPP文件,文件在最后面贴出来 叫做CLoad3DS.cpp   CLoad3DS.h 下面用nehe最简单的一个列子来展现如何导入,非常的简单 不需要管这个两个文件里面具体复杂