Я пытаюсь скрыть HTML.ActionLink по умолчанию, когда страница сначала отображает, а затем управляет видимостью на основе страницы, на которой пользователь включен. Какие-либо предложения? Спасибо!Есть ли способ сделать HTML.ActionLink невидимым по умолчанию?
ответ
По умолчанию визуализируйте ссылку с атрибутом CSS display:none
. Затем используйте Javascript для переключения display
на значение, которое будет отображать ссылку при необходимости. Дополнительная информация here.
jQuery предоставляет функции show() и hide() effects, которые позволяют легко переключаться на видимость элемента или элементов.
вы можете установить любой стиль в ссылке действия, установив его атрибуты html.
Html.ActionLink(
"LinkName",
"Action",
null,
new { @style = "display:none" });
Ничего из предложений не работает. Возможно, я должен был упомянуть, что этот ActionLink находится в таблице Partial View. Это может быть причиной этого? –
Если вы помещаете его в частичное представление, вам нужно убедиться, что любой вид, который использует View, имеет соответствующий контроллер для обработки действия, которое вы определяете. – Joseph
я. Действие на этом ActionLink отлично работает. Эта скрывающая вещь должна быть легкой, но по какой-то причине она превращается в настоящую хастл. :) –
создать ссылку действий помощника с htmlAttributes перегружать, чтобы дать ему класс
Html.ActionLink("link","link",null, new { @class=model.mystatus })
Вы должны установить значение @class из свойства в модели, то либо не применяются «дисплей: нет;» к классу в CSS или установить элемент для скрытия с помощью jquery -> $ ('. statusclass'). hide();
Я предполагаю, что вы хотите контролировать видимость тега, сгенерированного методом помощника Html.ActionLink, верно? Если да, то вы можете указать динамически класс для тега, как показано ниже:
<%=Html.ActionLink("link", "MyAction", null, new { @class = ViewData["actionLinkClass"] })%>
В вашем методе действия контроллера можно определить значение ViewData["actionLinkClass"]
для видимого или скрытого стиля.
Единственное, что сработало, это обертывание ActionLink в промежутке, назначение класса, скрытие его в CSS и его отображение в JavaScript. По какой-то причине присвоение имени класса непосредственно ActionLink не будет работать.
Спасибо за помощь всем!
Вот метод:
- Добавить класс CSS по ссылке
- Добавьте класс CSS к тэгу тела каждой страницы, использовать как много уникальных значений, как вам нужно
- Редактировать ваш CSS файл, чтобы показать/скрыть ссылку на основе комбинации тега body body и класса в ссылке.
Пример файла CSS:
body.events .myLink,
body.about .myLink {
display:none;
}
body.programs .myLink {
display:inline;
}
Тогда вам не нужно делать что-нибудь в стиле фанк с ActionLink. Это не затрагивает вопрос о том, почему вы используете ссылку, которую вы не хотите показывать в первую очередь, но я надеюсь, что у вас есть веская причина.
Чтобы определить погоду, чтобы скрыть или показать ссылку, вам необходимо предоставить эту информацию через 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.
Я пробовал оба предложения, и это не сработало. Вот что я пробовал в прошлом, и он все еще отображается на странице. <% = Html.ActionLink («Изменить», «Изменить», «Пакет», новый {id = Model.ID, @style = "display: none"}, null)%> –
style = "display: none ;» << обратите внимание на «;» и взять @ вне этого не нужно – Mark
Пробовал, все еще не работает. :) Я должен был упомянуть, что этот ActionLink добавляется путем циклического перемещения элементов модели в частичном представлении. –