#asp.net #vb.net
#asp.net #vb.net
Вопрос:
У меня есть следующее в моем интерфейсе / веб-форме:
<div id="mydiv" class="forceHeight" runat="server" />
Теперь в моем коде есть условие, при котором, если определенная ситуация верна, мне нужно удалить forceHeight
класс из этого элемента управления. Я знаю, что в C # вы можете использовать:
mydiv.CssClass.Replace("forceHeight", "");
Я не совсем уверен, как вы это делаете, используя VB? Intellisense не предлагает мне эту опцию?
У кого-нибудь есть идеи?
Комментарии:
1. Ответ от @Obsidian действительно должен быть принятым ответом здесь. Принятый в настоящее время ответ просто удаляет все классы.
Ответ №1:
Как удалить ОДИН класс CSS из элемента управления с помощью .NET
Если элемент управления имеет несколько классов, вы можете удалить один из этих классов, отредактировав строку class. Оба этих метода требуют присвоения идентификатора HTML-элементу, чтобы вы могли настроить на него таргетинг в коде, лежащем в основе.
<asp:Panel ID="mydiv" CssClass="forceHeight class2 class3" runat="server" />
VB.NET
mydiv.CssClass = mydiv.CssClass.Replace("forceHeight", "").Trim()
C#
mydiv.CssClass = mydiv.CssClass.Replace("forceHeight", "").Trim();
ИЛИ с помощью универсального элемента управления html
<div id="mydiv" class="forceHeight class2 class3" runat="server" />
VB.NET
mydiv.Attributes("class") = mydiv.Attributes("class").Replace("forceHeight", "").Trim()
C#
mydiv.Attributes["class"] = mydiv.Attributes["class"].Replace("forceHeight", "").Trim();
Необязательно Trim
для удаления завершающего пробела.
Как удалить ВСЕ классы CSS из элемента управления с помощью .NET
VB.NET
mydiv.Attributes.Remove("class")
C#
mydiv.Attributes.Remove("class");
Комментарии:
1. Я в замешательстве, почему OP принял ответ, который принят. Он, кажется, спрашивал, как удалить
a single css class
и приведенные выше ответы дают решение о том, как удалитьall css classes
. Кроме того, то, что он попробовал, было почти тем, что он хотел сделать:mydiv.CssClass.Replace("forceHeight", "");
. Но многие люди забывают, чтоReplace
это метод, который возвращаетString
объект, а не процедуру, поэтому вы должны преобразовать его в переменную.2. Кроме того, могу ли я предложить вам
Trim
использовать данную строку следующим образом:Me.mydiv.CssClass.Replace("forceHeight", "").Trim()
? Это делает html более приятным для чтения, когда вclass
атрибуте нет ненужных пробелов.3. @BishopBarber Вы правы, я столкнулся с этим вопросом, но в итоге мне пришлось решать его самому. Я добавил свои выводы, чтобы помочь другим, кто пришел сюда. P.s Trim добавил «чистота — это счастье =)`
4. @Skillzore В div действительно есть
class
и на этот класс можно ссылаться из исходного кода путем вызова,CssClass
приrunat="server"
наличии тега. Кроме того, использование пробела в вызове не сработало бы, потому что тогда класс был бы удален, только если бы пробел существовал, чего в некоторых случаях нет.5. Замена подстроки может изменить другие классы (например, forceHeight2). Для уверенности класс можно разбить на массив и отфильтровать:
mydiv.Attributes["class"] = String.Join(" ", mydiv.Attributes["class"].Split(' ').Where(x => x != "forceHeight"));
Для фильтрации по нескольким классам, содержащимся в HashSet, можно использовать:mydiv.Attributes["class"] = String.Join(" ", mydiv.Attributes["class"].Split(' ').Where(x => !(new HashSet<string> { "one", "two" }).Contains(x)));
Ответ №2:
Это приведет к удалению всех классов CSS из div с ID="mydiv"
Me.mydiv.Attributes("class") = ""
Ответ №3:
Me.mydiv.Attributes.Remove("class")
намного лучше, поскольку он не оставит заглушки. Это приведет к созданию более чистого HTML-тега.
<div id="mydiv"></div>
Если вы используете это,
Me.mydiv.Attributes("class") = ""
вместо этого он создаст это
<div id="mydiv" class=""></div>
или <div id="mydiv" class></div>
Ответ №4:
Я считаю, что лучше использовать REGEX replace, поскольку заменяющий класс может существовать как частичное имя в других классах, что приведет к их нарушению. Итак, я использую следующий метод расширения:
public static void RemoveClass(this WebControl control, string classToRemove)
{
if (control == null)
return;
control.CssClass = Regex.Replace(control.CssClass, @"(^|s)" classToRemove @"($|s)", " ");
}
Ответ №5:
mydiv.Attributes["class"] = mydiv.Attributes["class"].ToString().Replace("ClassName","")
Ответ №6:
mydiv.Attributes("class") = mydiv.Attributes("class").Replace("forceHeight", "")
Другие ответы у меня не сработали. Как и сказал OP, я не myDiv.CssClass
в IntelliSense
деле.
Ответ №7:
public static void appendCssClass(HtmlGenericControl htmlGenericControl, string cssClassName)
{
htmlGenericControl.Attributes.Add("class",
htmlGenericControl.Attributes["class"].ToString() " " cssClassName);
}
public static void removeCssClass(HtmlGenericControl htmlGenericControl, string cssClassName)
{
htmlGenericControl.Attributes.Add("class",
htmlGenericControl.Attributes["class"].Replace(cssClassName, ""));
}
Комментарии:
1. Этот код действительно может ответить на вопрос, но без объяснения неясно, как именно, и чем он отличается от других ответов. Не могли бы вы, пожалуйста, добавить несколько комментариев, чтобы сделать ваш ответ более полезным для будущих читателей?