MVCAdmin项目知识点记录

1、在过滤器中,用ViewBag类似的东西,要((ViewResult)filterContext.Result).ViewBag。

2、Controller中自己定义的非Action方法中(包括构造方法),使用不了Session,这时获取不到Session。可以使用ViewData、ViewBag存数据。

3、权限验证及菜单读取

  我想在BaseController中,根据Session用户角色读取加载菜单,在权限过滤器中验证是否登录,在Action过滤器中验证每次请求是否合法。但这样是不行的,因为在BaseController中没法获取到Session,包括构造方法中,并且权限过滤器中也是在BaseController中构造方法之后运行的。各Controller中的只有Index页面,才进行菜单获取,其他Action是不进行菜单获取的。因此,菜单获取的方法不能放在BaseController中,只能放在Action过滤器中。验证登录和权限,是要求每个Action都要进行的操作,因此这个可以放在使用BaseController解决,这样只需要给BaseController加上权限过滤器就可以了,其他Controller只需要继承就行了。

4、前端页面使用Shared页面,加载各个部分

  _ViewStart中,如果页面中不指定Layout = null;,页面都会先加载_ViewStart中定义的布局页。使用@Html.Partial加载,指定的其他布局页,比如菜单页、头部、底部等不变的分布页。使用@RenderBody(),加载各个View视图页。

5、动态加载添加编辑页面导致的jquery validate验证是问题

  https://stackoverflow.com/questions/18634629/jquery-validation-on-modal-popup

  只能在,点击保存的时候加上验证,其他地方都不行,并且还必须要加上 $('#myModal form').valid(),方法验证才会显示验证错误信息。返回true才执行下一步。

6、添加和修改要分开,因为要具体的权限管理,有的角色可能只要添加

7、在js中使用C# MVC代码,再穿插使用js代码

  使用<text></text>标签包裹js代码,这样就会使转换器返回到html模式。如:

 function btnFormatter(value, row, index) {
            var btns = "";
            @if (currentMenuModel.actionUrls.Exists(t => t.Equals("Edit", StringComparison.OrdinalIgnoreCase)))
            {
                <text>btns += '<button type="button" class="btn  btn-info" onclick="edit(\'' + row.id + '\')">修改</button>&nbsp;'</text>
            }
            @if (currentMenuModel.actionUrls.Exists(t => t.Equals("Delete", StringComparison.OrdinalIgnoreCase)))
            {
                <text>btns += '<button type="button" class="btn  btn-danger" onclick="del(\'' + row.id + '\')">删除</button>'</text>
            }
            return btns;
        }

 

posted @ 2017-07-01 10:26  随缘梦中人  阅读(164)  评论(0编辑  收藏  举报