在帮助程序模板cshtml页面中使用ActionLInk

时间:2011-05-31 18:19:08

标签: asp.net-mvc-3 razor

为什么Html.ActionLink在下面的代码中不起作用?这是app_code文件夹中的一个页面, 我试图从 index.cshtml

调用

LogOnUserControl.cshtml
    @helper DisplayUserControl(){             if(Request.IsAuthenticated){

        <span>Welcome <strong>@User.Identity.Name</strong>!</span>
        <span>[ {@Html.ActionLink("","","")}  ]</span>

    }
    else {
        <span>[{@Html.ActionLink("","","") }]</span>

    }
    }

这是来自 index.cshtml 的代码行。调用本身是有效的,如果我删除Html.ActionLink语句,网站加载正常。难道你不能在这样的嵌套页面中使用它们吗?我还能如何生成动态链接?

index.cshtml
@LogOnUserControl.DisplayUserControl()

1 个答案:

答案 0 :(得分:8)

这个动作链接有什么想法?为什么要将空字符串作为参数传递?我想你想要生成SignIn,SignOut链接,不是吗?

此外,如果您想在放入App_Code文件夹的共享帮助程序中使用HTML帮助程序,则需要将它们作为参数传递,因为它们不可用:

@using System.Web.Mvc.Html

@helper DisplayUserControl(System.Web.Mvc.HtmlHelper html) {
    if (html.ViewContext.HttpContext.User.Identity.IsAuthenticated) {
        <span>
            Welcome 
            <strong>
                @html.ViewContext.HttpContext.User.Identity.Name
            </strong>
            !
        </span>
        <span>[@html.ActionLink("SignOut", "Login")]</span>
    }
    else {
        <span>[@html.ActionLink("SignIn", "Login")]</span>
    }
}

并致电帮助者:

@LogOnUserControl.DisplayUserControl(Html)

就个人而言,我从不使用这些助手(你放在App_Code文件夹中的助手)。当你有部分视图,编辑/显示模板和Html.Action助手时,看不到任何用途。

例如,您可以定义部分(~/Views/Shared/_LogOnUserControl.cshtml):

@if (User.IsAuthenticated) {
    <span>
        Welcome 
        <strong>
            @User.Identity.Name
        </strong>
        !
    </span>
    <span>[@Html.ActionLink("SignOut", "Login")]</span>
}
else {
   <span>[@Html.ActionLink("SignIn", "Login")]</span>
}

您将在广告中添加:

@Html.Partial("_LogOnUserControl")