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及参数的理解,也很有收获。

原文地址:https://www.cnblogs.com/liuyouying/p/5058639.html