2009-11-05 1 views
1

Я пытаюсь скрыть HTML.ActionLink по умолчанию, когда страница сначала отображает, а затем управляет видимостью на основе страницы, на которой пользователь включен. Какие-либо предложения? Спасибо!Есть ли способ сделать HTML.ActionLink невидимым по умолчанию?

+0

Я пробовал оба предложения, и это не сработало. Вот что я пробовал в прошлом, и он все еще отображается на странице. <% = Html.ActionLink («Изменить», «Изменить», «Пакет», новый {id = Model.ID, @style = "display: none"}, null)%> –

+0

style = "display: none ;» << обратите внимание на «;» и взять @ вне этого не нужно – Mark

+0

Пробовал, все еще не работает. :) Я должен был упомянуть, что этот ActionLink добавляется путем циклического перемещения элементов модели в частичном представлении. –

ответ

0

По умолчанию визуализируйте ссылку с атрибутом CSS display:none. Затем используйте Javascript для переключения display на значение, которое будет отображать ссылку при необходимости. Дополнительная информация here.

jQuery предоставляет функции show() и hide() effects, которые позволяют легко переключаться на видимость элемента или элементов.

2

вы можете установить любой стиль в ссылке действия, установив его атрибуты html.

Html.ActionLink(
    "LinkName", 
    "Action", 
    null, 
    new { @style = "display:none" }); 
+0

Ничего из предложений не работает. Возможно, я должен был упомянуть, что этот ActionLink находится в таблице Partial View. Это может быть причиной этого? –

+0

Если вы помещаете его в частичное представление, вам нужно убедиться, что любой вид, который использует View, имеет соответствующий контроллер для обработки действия, которое вы определяете. – Joseph

+0

я. Действие на этом ActionLink отлично работает. Эта скрывающая вещь должна быть легкой, но по какой-то причине она превращается в настоящую хастл. :) –

0

создать ссылку действий помощника с htmlAttributes перегружать, чтобы дать ему класс

Html.ActionLink("link","link",null, new { @class=model.mystatus }) 

Вы должны установить значение @class из свойства в модели, то либо не применяются «дисплей: нет;» к классу в CSS или установить элемент для скрытия с помощью jquery -> $ ('. statusclass'). hide();

0

Я предполагаю, что вы хотите контролировать видимость тега, сгенерированного методом помощника Html.ActionLink, верно? Если да, то вы можете указать динамически класс для тега, как показано ниже:

<%=Html.ActionLink("link", "MyAction", null, new { @class = ViewData["actionLinkClass"] })%> 

В вашем методе действия контроллера можно определить значение ViewData["actionLinkClass"] для видимого или скрытого стиля.

0

Единственное, что сработало, это обертывание ActionLink в промежутке, назначение класса, скрытие его в CSS и его отображение в JavaScript. По какой-то причине присвоение имени класса непосредственно ActionLink не будет работать.

Спасибо за помощь всем!

0

Вот метод:

  • Добавить класс CSS по ссылке
  • Добавьте класс CSS к тэгу тела каждой страницы, использовать как много уникальных значений, как вам нужно
  • Редактировать ваш CSS файл, чтобы показать/скрыть ссылку на основе комбинации тега body body и класса в ссылке.

Пример файла CSS:

body.events .myLink, 
body.about .myLink { 
    display:none; 
} 
body.programs .myLink { 
    display:inline; 
} 

Тогда вам не нужно делать что-нибудь в стиле фанк с ActionLink. Это не затрагивает вопрос о том, почему вы используете ссылку, которую вы не хотите показывать в первую очередь, но я надеюсь, что у вас есть веская причина.

0

Чтобы определить погоду, чтобы скрыть или показать ссылку, вам необходимо предоставить эту информацию через Model или ViewData. Я полагаю, у вас есть ссылка на главной странице.

Итак, первый шаг - предоставить эту информацию для всех просмотров на вашем сайте.Вы можете сделать это путем создания базового контроллера и переопределить метод (и, конечно, все ваши контроллеры должны наследовать Сформируйте новый):

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    if (filterContext.ActionResult is ViewResult) { 
     ViewData["Shared-ShowTheLink"] = IsLinkeVisible(filterContext) ? "non-null" : null; 
    }  
} 

private bool IsLinkeVisible(ActionExecutedContext filterContext) { 
    // Show on the home page only, for example 
    var controllerName = filterContext.RouteData.Values["controller"]; 
    var actionName = filterContext.RouteData.Values["action"]; 

    var isHome = string.Compare(controllerName, "Home", StringComparison.InvariantCultureIgnoreCase) == 0; 
    var isIndex = string.Compare(actionName, "Index", StringComparison.InvariantCultureIgnoreCase) == 0; 
    return isHome && isIndex; 
} 

После того, что вам нужно для вашей главной страницы (или представления) и сделать что-то как это (предполагающее WebForms посмотреть двигатель):

<% if (ViewData["Shared-ShowTheLink"] != null) { %> 
    Html.ActionLink("Link Text", "Action", "Controller"); 
<% } %> 

Теперь ваша ссылка должна быть видна только на Home/Index.
Чтобы изменить это, измените метод IsLinkeVisible по мере необходимости.

Cheers.