Использование ActionLInk из вспомогательной cshtml-страницы шаблона - PullRequest
7 голосов
/ 31 мая 2011

Почему 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 Ответ

8 голосов
/ 31 мая 2011

В чем идея с этим действием ссылки? Почему вы передаете пустые строки в качестве аргументов? Полагаю, вы хотите создать ссылки для входа, выхода из системы, не так ли?

Также, если вы хотите использовать помощники HTML внутри общих помощников, которые вы поместили в папку App_Code, вам нужно будет передать их в качестве аргументов, потому что они недоступны:

@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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...