为什么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()
答案 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")