在局部视图中获取当前操作并运行jQuery

时间:2013-07-29 16:07:56

标签: jquery asp.net-mvc razor

我有一个部分视图,其中包含一个菜单,具体取决于我想要显示或隐藏链接的当前操作,我的尝试在此下面

@if (ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString() == "Users")
{
    <script>
        $("#addVS").show();
    </script>
}   
    <li>@Html.ActionLink("Users", "Users", "Users")
        <ul id="addVS" style="display:none;">
            <li>@Html.ActionLink("Add New User", "AddEditRecord", "Users",new { mode = "null"}, new { @id = "openDialog" })</li>
        </ul>
    </li>

2 个答案:

答案 0 :(得分:1)

您可能不需要使用任何javascript,只需在服务器端有条件地输出锚点:

<li>
    @Html.ActionLink("Users", "Users", "Users")

    @if (ViewContext.RouteData.GetRequiredString("action") == "Users")
    {
        <ul>
            <li>
                @Html.ActionLink(
                    "Add New User", 
                    "AddEditRecord", 
                    "Users",
                    new { mode = "null" }, 
                    new { id = "openDialog" }
                )
            </li>
        </ul>
    }
</li>

答案 1 :(得分:1)

你有没有理由使用jQuery,而不是让控制器隐藏或显示<li></li>

<li>@Html.ActionLink("Users", "Users", "Users")
    @if (ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString() == "Users")
    {
            <ul id="addVS">
                <li>@Html.ActionLink("Add New User", "AddEditRecord", "Users",new { mode = "null"}, new { @id = "openDialog" })</li>
            </ul>
    }   
</li>

这样,控制器在构建局部视图时会渲染菜单。

如果 使用jQuery来隐藏或显示链接,请不要将脚本放在razor条件语句中。将脚本标记放在父视图的页眉或页脚中,并使用jQuery检查条件是否为真并相应地隐藏/显示

<script type="text/javascript">

if(condition is true){
    $("#addVS").show();
}
</script>