Mvc示例代码之四Razor模板(二)
来源:互联网 发布:淘宝阿里医生在哪里 编辑:程序博客网 时间:2024/05/22 00:35
这节我们用一个实际的Action例子讲解一下mvc前后台传递数据。
前后台数据传递例子
public ActionResult GetList(string BigClassName,int? pageIndex) { int pageCount=0; int recordCount=0; string whereSql=" where 1=1 "; if(!string.IsNullOrEmpty(BigClassName)) { whereSql+=" and BigClassName='"+BigClassName+"'"; } DataTable dt=AccessHelper.ExecutePager(pageIndex??1,15,"[ID]","*","News",whereSql," AddDate desc,Hits desc",out pageCount,out recordCount); NewsS news = new NewsS(); news.FromDataTable(dt); ViewBag.pageIndex = pageIndex;//记住当前页数 ViewBag.Pager = MakePager(BigClassName,pageCount, pageIndex ?? 1);//生成页码 BigClass_NewS bigNews = new BigClass_NewS(); bigNews.FromDataTable(EntityDMHelper.GetBigClass_New()); ViewBag.BigNews = bigNews;//文章列表 ViewBag.BigClassName = BigClassName;//文章类别 return View(news); } //生成页码 private string MakePager(string BigClassName,int pageCount, int pageIndex) { StringBuilder sbPager = new StringBuilder(); string url = string.Format("{0}?BigClassName={1}",Url.Action("GetList"),BigClassName); if (pageIndex > 1) { sbPager.Append(string.Format("<a href='{0}'>首 页</a> ",url)); sbPager.Append(string.Format("<a href=\"{1}&pageIndex={0}\">上一页</a> ", pageIndex - 1, url)); } else { sbPager.Append("<span style='color:gray;'>首 页</span> "); sbPager.Append("<span style='color:gray;'>上一页</span> "); } if (pageIndex < pageCount) { sbPager.Append(string.Format("<a href=\"{1}&pageIndex={0}\">下一页</a> ", pageIndex + 1, url)); sbPager.Append(string.Format("<a href='{1}&pageIndex={0}'>尾 页</a>", pageCount, url)); } else { sbPager.Append("<span style='color:gray;'>下一页</span> "); sbPager.Append("<span style='color:gray;'>尾 页</span>"); } return sbPager.ToString(); }ViewBag实际上是一种向前台传递数据的方法。可以翻译为包裹。这个包裹是强类型的。在Mvc2中,我们用ViewData传递数据就需要类型转换;ViewBag可以直接使用。
在Action方法上点击右键,选择添加视图。在弹出页面中选择如下:
图一、创建强类型View
注意选中强类型视图,并且选择模板页。强类型选择时,要选中我们主要表现的数据。这是强类型数据可以用Model获取;如果像我们这次要表示很多数据,其他数据就要用ViewBag.xxx来获取。前台代码如下:
@model Entity.NewsS @using Entity;@{ ViewBag.Title = ""; Layout = "~/Views/Shared/_Layout.cshtml";}<script type="text/javascript"> function SelectAll() { if ($("#selectA").attr("checked")) { $("input").attr("checked", true); } else { $("input").attr("checked", false); } } function delItem(id){ if(confirm("是否确定删除该条新闻?")){ $.post(" @Url.Action("Delete")?id="+id, function(data){ alert(data.msg); if(data.flag){ window.location.href=window.location.href; } }); } } function delAll(){ var delIds=""; $.each($("input:checked").filter("input[name='id']"),function(i,item){ delIds+=$(item).val()+','; }); if(delIds.length>1){ if(confirm("亲,你真的要删除这许多新闻吗?请慎重啊!")){ $.post(" @Url.Action("DeleteAll")?ids="+delIds, function(data){ alert(data.msg); if(data.flag){ window.location.href=window.location.href; } }); } } else { alert('您未选中任何新闻'); } }</script><div> <div> <a href="@Url.Action("GetList")" ><span @if(string.IsNullOrEmpty(ViewBag.BigClassName??"")){@Html.Raw("style=\'color:red; font-weight:xx-blod;\'")}>全部文章</span></a> @foreach (BigClass_New bigClass in ViewBag.BigNews) { <span> | </span><a href="@Url.Action("GetList")?BigClassName=@bigClass.BigClassName" @if ((ViewBag.BigClassName??"").Equals(bigClass.BigClassName)) {@Html.Raw("style='color:red; font-weight:xx-blod;'")}>@bigClass.BigClassName</a> } </div> <table class="table"> <thead> <tr> <th><input type="checkbox" id="selectA" onclick="SelectAll();" /></th><th>新闻标题</th><th>一级分类</th><th>二级分类</th><th>添加时间</th><th>点击次数</th><th>操作</th> </tr> </thead> <tbody> @foreach (News news in Model) { <tr> <td><input type="checkbox" name="id" value="@news.ID.ToString()" /></td> <td>@Html.Raw(news.Title)</td><td>@news.BigClassName</td><td>@news.SmallClassName</td> <td>@news.AddDate.ToString("yyyy-MM-dd HH:mm:ss")</td><td>@news.Hits</td> <td> <a href="javascript:delItem('@news.ID.ToString()');">删除</a> <a href="@Url.Action("Index")?id=@news.ID.ToString()">编辑</a> </td> </tr> } <tr> <td colspan="6" align="right" > @Html.Raw(ViewBag.Pager) </td> <td colspan="1" align="right"> <a href="javascript:delAll();">删除所有</a> | <a href="@Url.Action("Index")">添加</a> </td> </tr> </tbody> </table></div>看上面代码,使用model前先声明一下类型,注意是小写,使用时用大写:
@model Entity.NewsS
而实际引用时,则用大写
@foreach (News news in Model) {另外要注意一下,我在输出页码时是这样写的:
@Html.Raw(ViewBag.Pager)因为页码是一些Html代码,如果直接写@ViewBag.Pager的话会输出<a href="'>第一页</a>类似的东东。即进行了转义。
我们模板页如下:
<!DOCTYPE html><html><head> <title>新需能电源企业网站管理</title> <link href="@Url.Content("~/Content/css/bootstrap.css")" rel="stylesheet" type="text/css" /> <link href="@Url.Content("~/Content/css/bootstrap-responsive.min.css")" rel="stylesheet" type="text/css" /> <link href="@Url.Content("~/Content/css/common.css")" rel="stylesheet" type="text/css" /> <link href="@Url.Content("~/Content/css/docs.css")" rel="stylesheet" type="text/css" /> <link href="@Url.Content("~/Content/css/prettify.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.7.2.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/bootstrap.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate-vsdoc.js")" type="text/javascript"></script> <style type="text/css"> label.error { color:Red; font-size:13px; margin-left:125px; padding-left:0px; } </style> </head><body data-spy="scroll" data-target=".subnav" data-offset="0"> <div class="navbar navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span></a><a class="brand" href="#">新需能电源企业网站</a><div class="nav-collapse"> <ul class="nav"> <li class="active"><a href="@Url.Action("GetList","Article")">首页</a><li>@*<li><a href="#">连接</a></li><li><a href="#">连接</a></li><li><a href="#">连接</a></li><li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">下拉<b class="caret"></b></a> <ul class="dropdown-menu"> <li><a href="#">动作</a></li><li><a href="#">另一个动作</a></li><li><a href="#">其他动作</a></li><li class="divider"></li><li class="nav-header">导航头</li><li><a href="#">被间隔的连接</a></li><li><a href="#">另一个连接</a></li> </ul></li>*@ </ul> <ul class="nav pull-right"> <li><a href="components.html#" class="text-info">天行健,君子以自强不息 地势坤,君子以厚德载物</a></li> <li><a href="@Url.Action("Logout","Home")">退出</a></li> @* <li class="dropdown"> <a href="components.html#" class="dropdown-toggle" data-toggle="dropdown">下拉 <b class="caret"></b></a> <ul class="dropdown-menu"> <li><a href="components.html#">动作</a></li> <li><a href="components.html#">另一个动作</a></li> <li><a href="components.html#">其他动作</a></li> <li class="divider"></li> <li class="nav-header">导航头</li> <li><a href="components.html#">被间隔的链接</a></li> <li><a href="@Url.Action("Logout","Home")">退出</a></li>*@ </ul> </li> </ul></div> </div></div> </div><div class="container"><section id="javascript"> <div class="row"> <div class="span3" style="background:gray;height:620px;"> <ol> <li><a href="@Url.Action("GetList","Article")">文章列表</a></li> <li><a href="@Url.Action("Index","Article")">文章添加</a></li> <li><a href="@Url.Action("Index","BigClass")">分类管理</a></li> <li><a href="@Url.Action("Index","Feedback")">留言管理</a></li> </ol> </div> <div class="span9">@RenderBody()</div> </div></div></body></html>上面子页中的代码就会替换
<div class="span9">@RenderBody()</div>中的@RenderBody()占位符。
一般来说,我们会把每次都会引用的js文件,样式表等都放在模板页中。其实模板页就是为了代码的复用啊。
用Razor写HtmlHelper
最后我们来讲解一下Mvc中的一个重要部分HtmlHelper。Mvc3中可以在cshtml中用@helper关键字写HtmlHelper
我们摘抄出子页中一句
@news.AddDate.ToString("yyyy-MM-dd HH:mm:ss")这种语句我们如何用HtmlHelper实现呢?可以这样做:
首先在项目中添加一个App_Code文件夹,在其中新建一个DateHelper.cshtml并添加如下代码:
@helper DisplayDate(DateTime date)
{
@date.ToString("yyyy-MM-dd HH:mm:ss")
}
此时,可以我们摘抄出来的句子这样写:
@DateHelper.DisplayDate(news.AddDate)
如此,就简单的实现了一个HtmlHelper。聪明的读者们可能想到用这种方法写一个特殊的小控件。
页面效果如下:
图二、页面效果
好了,本节讲到这里。下一节我们讲一下用强类型提交数据。
- Mvc示例代码之四Razor模板(二)
- Mvc示例之四Razor模板(一)
- MVC Razor模板引擎
- MVC Razor模板引擎
- 【ITOO】MVC之Razor
- SSL通关之代码示例(四)
- MVC札记(二)--Razor视图引擎语法
- Mvc示例代码调试之二——调试示例讲解
- MVC| Razor 布局-模板页 | ViewStart.cshtml
- 脱离MVC使用Razor模板引擎
- [译]Razor内幕之模板
- MVC Razor
- spring mvc学习(四)之工程代码
- Razor 模板
- MVC Razor与javascript混编(js中嵌入razor)
- Nuva 示例代码(每日一帖)之 模板示例(1)
- Nuva 示例代码(每日一帖)之 模板示例(2)
- Nuva 示例代码(每日一帖)之 模板示例(3)
- 项目库存管理模块
- 一个字符串中是否包含另一个字符串
- 终于拿到驾照了
- 【算法】图论_树_LCA
- Storm入门教程 第三章 Storm安装部署步骤
- Mvc示例代码之四Razor模板(二)
- Linux GPIO简介
- 【算法】图论_网络流_费用流
- Spring IOC容器之进阶篇
- java发展史
- 这样投简历,HR一定会看
- hdu4111 Alice and Bob
- Power(int base, int exponent) 函数实现
- BackTrack 5 R3 install OpenVAS 6