视图和过滤器

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)
Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注