Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc @if语句中的Html.ActionLink()_Asp.net Mvc_Razor - Fatal编程技术网

Asp.net mvc @if语句中的Html.ActionLink()

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">

我正在学习MVC4,因此使用razor引擎来呈现我的视图。请容忍我:)

我有一个如下所示的导航菜单:

我想要一个箭头,当用户点击其中一个导航菜单时,箭头指向它的内容。代码如下:

<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>