2013-04-29 132 views
3

我正在学习MVC 4,因此使用剃刀引擎来渲染我的视图。请多多包涵:)@ Html.ActionLink()if语句

我有一个导航菜单,看起来像这样:

enter image description here

而且我希望有一个指向起伏朝其内容的箭头,当用户点击导航中的一个菜单。这里是代码:

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

现在,我想知道在if语句中写什么。我知道我需要链接我的箭头动作链接 - 这样的事情:

@if (@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence")) 
{ 
    <span id="triangle">      
    <img src="~/Images/nav_arrow.png" /> 
    </span> 
} 

任何帮助,将不胜感激。谢谢你的时间。

PS:我的问题有意义吗?

这是我的观点:

 <!DOCTYPE html> 

<head> 
     <meta charset="utf-8" /> 
     <title>@ViewBag.Title - My ASP.NET MVC Application</title> 
     <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
     <meta name="viewport" content="width=device-width" /> 
     @Styles.Render("~/Content/css") 
     @Scripts.Render("~/bundles/modernizr") 
</head> 

<body> 
    <div class="WebContent"> 
    <nav> 
     <ul id="menu"> 
      <li> 
       <a href="@Url.Action("Index", "Business_Intelligence")"> 
        <img src="~/Images/myImage-Logo.png" /> 
       </a> 

       @if (ViewContext.RouteData.Values["controller"] == "Business_Intelligence") 
       { 
        <span class="triangle"> 
         <img src="~/Images/nav_arrow.png" /> 
        </span> 
       } 

      </li>        
      <li> 
       @Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence") 

       @if (ViewContext.RouteData.Values["controller"] == "Business_Intelligence") 
       { 
        <span class="triangle"> 
         <img src="~/Images/nav_arrow.png" /> 
        </span> 
       } 

      </li> 
      <li>@Html.ActionLink("Marketing Services", "MarketingServices", "Marketing")</li> 
     </ul> 

    </nav> 

     @RenderSection("featured", required: false) 
     @RenderBody() 
     @Scripts.Render("~/bundles/jquery") 
     @RenderSection("scripts", required: false) 

    <footer> 
      <p>Footer</p> 
    </footer> 

    </div> 

</body> 

和我的CSS:

/* Images 

------------ ----------------------------------------------- */

.triangle{ 
display:block; 
text-align: center; 

}

+0

这有点复杂,你用if语句做什么?你是否试图找到是否有人点击,徘徊,如果链接exsists? – Nomad101 2013-04-29 21:27:54

+0

正确!我试图弄清楚是否有人点击菜单。 – Oliver 2013-04-29 21:45:21

+0

好吧,这可以使用链接的onclick属性来完成。您可以设置一个函数来在用户点击链接时调用,例如展开某物或隐藏另一个面板。 – Nomad101 2013-04-29 21:47:07

回答

2

如果我理解正确的话,您可以有效地要检测的当前页是否是一个由导航项目挂钩,如果是这样,使得在一些额外的标记相应的导航项。对于这一点,你可以使用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> 

这将完成的是检查是否正被Business_Intelligence控制器执行当前操作和 - 如果它是 - 使操作链接下方的额外的标记。

请注意,这只会在第一次加载视图时呈现箭头,即如果点击“商业智能”加载一个新页面,则该解决方案适合您。如果你需要动态地做到这一点(例如,点击“商业智能”实际上只是通过jQuery呈现更多内容而不实际刷新页面),那么Nomad101的解决方案更合适。

如果您需要比此更精细的粒度,该集合还包括一个"action"密钥。

+0

这正是我想要做的,因为我只想在点击后显示图像。我刚刚实施了您的解决方案,但图像未显示。你知道什么可能导致它? – Oliver 2013-04-29 22:17:00

+1

可能是因为我大写了“控制器” - 我认为它实际上应该都是小写。如果这不起作用,请尝试检查HTML以确保标记实际上不存在。如果没有,请尝试在视图中的某个地方粘贴@ Html.Raw(ViewContext.RouteData.Values [“controller”])来仔细检查是否存在值(应该在标记中写出,剃刀声明)。 – 2013-04-29 22:21:35

+0

我插入了@ Html.Raw(ViewContext.RouteData.Values [“controller”])之后,我可以看到Business_Intelligence显示。这是一个好兆头吧?但是,我仍然无法看到箭头。 – Oliver 2013-04-29 22:30:02

1

你可以使用这个网站助手补充说,要执行,当用户点击它的onclick方法的HTML属性。

@Html.ActionLink("Business Intelligence", "Index", "Business_Intelligence", null, new { onclick:"someFunc()" }) 

someFunc()是一个客户端java脚本函数。如果你愿意,这个函数可以很容易地进行争论,但这取决于你。每次单击元素时,它都会执行一次。 null值代替ActionLink助手的路由值对象,该值可以控制MVC中的特殊路由值,并且可能非常有用。

另一种方法是将元素设置为ID并使用jquery来处理事件。像这样的工作:

jQuery("#Link").on("click", function() { callback }); 
+0

谢谢,我正在调查它 – Oliver 2013-04-29 21:54:09

+0

我只是想说谢谢。我正在追求另一种解决方案,因为这正是我所寻找的。 再次感谢 – Oliver 2013-04-29 22:32:32

+0

没问题,我只是误以为你想要好运。 – Nomad101 2013-04-29 22:40:00