EF+MVC+Bootstrap 项目实践 Day10
一、点击菜单跳转页面后显示当前视图相关提示
以前在项目中用的是iframe,左侧菜单点击载入右侧相应的iframe。
现在看这份源码,点击左侧菜单,是直接href到新视图,共用_Layout.cshtml。页面刷新了,是从哪里点击过来的,怎么知道呢?
源码倒是提供了一种思路,每次载入_Layout.cshtml的时候,js判断当前视图和菜单栏所有a标签的href,看哪个href指向当前视图。判断到了之后有return false,不至于乱。
方法倒是挺巧妙的。。。但不知是所有MVC都这样处理,还是这边的独门绝技。有机会要再看看MVC项目,看这种共享页之间跳转是怎样处理的。
1、转义
@Html.ActionLink("管理首页", "Index", new {Area = "Account", Controller = "Auth"},new {Title = "管理系统首页", role = "button", data_toggle = "collapse" })
<a title="管理系统首页" data-toggle="collapse" href="/Account/Auth" role="button">管理首页</a>
在@Html里面,不能用-这个符号。。。只能用_,但解析出来会自动转成-,还有这种事。。。
如果偏偏有属性是下划线或其它特殊字符呢?终于找到了方法,可以使用任意字符,不再自动转义
@Html.ActionLink("管理首页", null, new RouteValueDictionary { {"Area", "Account"}, {"Controller", "Auth"}, {"Action", "Login"} }, new Dictionary<string, object> { {"Title", "管理系统首页"}, {"role", "button"}, {"data-toggle", "collapse"}, {"parent", "#accordion"}, {"aria-expanded", "true"}, {"aria-controls", "collapseOne"} })
另外,还有个Resharper的Bug(或不足)
按说第二个参数是ActionName,但Resharper死活认不出来(提示红色,Ctrl+左键也点不进去),虽然不影响使用,但有些不爽
但这样两种却又都可以,可能是因为封装成RouteValueDictionary,没那么智能了吧
可以看出,Resharper是把RouteValueDictionary里的当作普通参数看待,要传什么都可以,然后再匹配里面的Area、Controller之类的关键字
而直接使用对象就比较容易认出来
虽然只是一个小问题,但在研究期间,加深了很多对@Html.ActionLink及参数的理解,也很有收获。