17-部分视图动态改变
部分视图,允许我们动态改变视图里面的部分内容。
这节的内容在基础课中,我们已经介绍过了,这里为了节省时间,我们也就不再重复讲了,感兴趣的同学可以访问下面地址
http://www.FoxDevelop.com/course/volume/1263
之所以在进阶课程中再次提出来,是因为这个功能在一些管理页面后台可能会用到。
18-_ViewStart.cshtml的作用
_viewstart.cshtml 这个视图文件,对于很多人来说,好像很少存在感,但是其实它却是我们所有的视图都受它影响。
这个视图,也是就是所有的框架定死了,所有的视图(正常的action视图,不包括布局和部分视图)在加载前都先加载它
这个视图主要目的是指定布局页
所以如果的action视图其实如果用的就是
viewstart里面的layout视图,那么我们可以不写的
但是如果我们的action视图不想使用视图,那么就必须把layout设为null,否则还是使用viewstart里面的视图。
19-[AllowAnonymous]的使用
这个标注主要是用来是的某些action不需要验证都可以访问,意思就是允许匿名访问
比如我们现在有一个admincontroller的控制器,那么限制了它authorite的role
那么如果我们希望里面的login 和register是允许匿名访问的,那么我们就可以使用这个标注来让这两个匿名action允许访问。
20-Error.cshtml视图的使用
我们在开发的过程,不排除有一些时候会有错误,这个时候,我们就可以添加一些错误提示页面
我们添加一个Error.cshtml错误页
然后定义如下
错误页代码
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@Model.ExceptionCode language: HTML, XML (xml)
调用方式
return View("Error");Code language: JavaScript (javascript)
或者
return View("Error",new HandleErrorInfo(new Exception("ddddd"),this.GetType().ToString(),"Index"));Code language: JavaScript (javascript)
21-ASP.NET MVC过滤器Filter的使用
自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法
比如我们做一个来路过滤器,判断访问我们的action地址的来路,如果是某个网站的来路 那么我们就禁止访问
过滤器代码
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
}Code language: JavaScript (javascript)
然后在使用的action加上标注
[CheckRefere] //此处为自定义属性,要引用相应的命名空间
public ActionResult Index()
{
return View();
}Code language: PHP (php)
当然我们也可以在过滤器类里面加一个属性
public string Message { get; set; }Code language: JavaScript (javascript)
然后我们就可以使用这个参数了
[CheckRefere(Message="来路不明")]Code language: JSON / JSON with Comments (json)
全局过滤器
全局过滤器,顾名思义就是所有的action都起作用的过滤器
我们可以在Global.asax中注册
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}Code language: PHP (php)
22-ASP.NET MVC中分页的封装
我们知道,我们很多页面都需要用到分页,那么作为MVC,我们可以吧分页条做成一个部分视图,这样可以方便我们多处调用
其实想要实现分页
我们只需要得到几个值就可以了
分页视图代码
@{
var records = (int)ViewBag.Total;
var rows = (int)ViewBag.Rows;
var pages = records / rows == 0 ? 1 : (records % rows == 0 ? records / rows : records / rows + 1);
var currentPage = (int)ViewBag.CurrentPage;
var startPage = pages > 10 ? (currentPage <= 6 ? 1 : currentPage - 5) : 1;
var endPage = pages > 10 ? (currentPage <= 6 ? 11 : currentPage + 5) : pages;
if (endPage > pages)
{
endPage = pages;
startPage = endPage - 10;
}
var keyParam = (string)ViewBag.KeyParam;
}Code language: JavaScript (javascript)