Asp.net mvc @if语句中的Html.ActionLink()
我正在学习MVC4,因此使用razor引擎来呈现我的视图。请容忍我:) 我有一个如下所示的导航菜单: 我想要一个箭头,当用户点击其中一个导航菜单时,箭头指向它的内容。代码如下:Asp.net mvc @if语句中的Html.ActionLink(),asp.net-mvc,razor,Asp.net Mvc,Razor,我正在学习MVC4,因此使用razor引擎来呈现我的视图。请容忍我:) 我有一个如下所示的导航菜单: 我想要一个箭头,当用户点击其中一个导航菜单时,箭头指向它的内容。代码如下: <li> @Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence") @if () { <span id="triangle">
<li>
@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence")
@if ()
{
<span id="triangle">
<img src="~/Images/nav_arrow.png" />
</span>
}
</li>
<li>@Html.ActionLink("Marketing Services", "MarketingServices", "Marketing")</li>
-----------------------------------------------------------*/
.triangle{
display:block;
text-align: center;
}您可以使用此html帮助程序添加用户单击onclick方法时要执行的onclick方法的html属性
@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence", null, new { onclick:"someFunc()" })
关于这一点的一些注意事项someFunc()是一个客户端java脚本函数。如果您愿意,这个函数可以很容易地接受参数,但这取决于您。它将在每次单击元素时执行1次。null值代替ActionLink帮助程序的route values对象,该值可以控制MVC中的特殊路由值,非常有用
另一种方法是将元素设置为ID,并使用jquery处理事件。类似这样的方法会奏效:
jQuery("#Link").on("click", function () { callback });
如果我理解正确,您实际上希望检测当前页面是否是导航项链接的页面,如果是,则在相应的导航项上呈现一些附加标记。为此,您可以使用
ViewContext
:
<li>
@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence")
@if (ViewContext.RouteData.Values["controller"] == "Business_Intelligence")
{
<span id="triangle">
<img src="~/Images/nav_arrow.png" />
</span>
}
</li>
@ActionLink(“商业智能”、“索引”、“商业智能”)
@if(ViewContext.RouteData.Values[“控制器”]=“商业智能”)
{
}
这样做的目的是检查当前操作是否由Business\u Intelligence
控制器执行,如果正在执行,则在操作链接下方呈现附加标记
请注意,这将仅在首次加载视图时呈现箭头,即,如果单击“Business Intelligence”加载新页面,则此解决方案适用于您。如果您需要能够动态地执行此操作(例如,单击“Business Intelligence”实际上只是通过jQuery呈现更多内容,而没有实际刷新页面),那么Nomad101的解决方案更合适
如果您需要比这更精细的粒度,那么集合还包括一个
“action”
键。它有点复杂,您使用If语句的目的是什么?你是否在试图找到是否有人点击,悬停,链接是否存在?正确!我想知道是否有人点击了菜单。好的,这可以通过使用链接的onclick属性来完成。您可以设置一个函数,当用户单击链接时调用,例如展开某个内容或隐藏另一个面板。基本上,链接已经存在。所以,当有人点击任一菜单时,我想显示一个图像:onclick属性的使用是唯一可用的解决方案吗?谢谢汉克斯,我正在调查我只是想说声谢谢。我正在寻求另一种解决方案,因为这正是我所寻求的。再次感谢你。没有问题,我只是被你想要的好运搞错了。那是我的错!我需要提高我的沟通技巧:)这正是我想要做的,因为我只想在点击后显示图像。我刚刚实现了您的解决方案,但图像未显示。你知道是什么原因导致的吗?可能是因为我大写了“Controller”-我认为它实际上应该是小写的。如果这不起作用,请尝试检查HTML以确保标记实际上不在那里。如果没有,请尝试在视图中的某个位置粘贴一个@Html.Raw(ViewContext.RouteData.Values[“controller”])
,以仔细检查那里是否有实际的值(应该在放置Razor语句的标记中写出)。在插入@Html.Raw(ViewContext.RouteData.Values[“controller”])之后我能够看到商业情报显示。这是个好兆头,对吗?然而,我仍然看不到箭头。是的,这是一个好迹象。这意味着价值存在。仔细检查if语句中的大小写是否正确(“根据我的编辑,是controller”而不是controller”)。如果这是正确的,但您仍然看不到箭头,请在加载页面时直接检查页面的标记,因为这听起来可能是标记/样式本身的问题,而不是Razor模板的问题。我以前从未这样做过-加载时如何检查页面的标记?
.triangle{
display:block;
text-align: center;
@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence", null, new { onclick:"someFunc()" })
jQuery("#Link").on("click", function () { callback });
<li>
@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence")
@if (ViewContext.RouteData.Values["controller"] == "Business_Intelligence")
{
<span id="triangle">
<img src="~/Images/nav_arrow.png" />
</span>
}
</li>