Как я могу использовать тег кнопки с ASP.NET?
Это старый вопрос, но для asp.net-website тех из нас, кому не повезло, которым webpage все еще приходится поддерживать aspx приложения веб-форм ASP.NET, я c#.net сам прошел через это, пытаясь div включить глифы Bootstrap c# во встроенные элементы управления c#-language кнопками.
Согласно документации htmlbutton Bootstrap, желаемая разметка visual-c# выглядит следующим образом:
Мне aspdotnet нужно, чтобы эта разметка aspx отображалась серверным элементом c# управления, поэтому я решил asp.net-website найти параметры.
Кнопка
Это будет html-tag первый логический шаг, но .cs-file - как объясняется в этом div вопросе - Button отображает c#-language элемент вместо
, поэтому c#.net добавление внутреннего HTML asp.net невозможно.
LinkButton (предоставлено Tsvetomir Tsonev's answer)
Источник
Search
Вывод
Search
Плюсы
- Выглядит нормально
-
Command
событие; СвойстваCommandName
иCommandArgument
Минусы
HtmlButton (предоставлено Philippe's answer)
Источник
Результат
Плюсы
- Выглядит нормально
- Отображает правильный элемент
Минусы
- Нет события
Command
; нет свойствCommandName
илиCommandArgument
- Отображает и использует навязчивый JavaScript для обработки своего события
ServerClick
На данный момент span ясно, что ни один из встроенных span элементов управления не кажется asp-net подходящим, поэтому следующий c#-language логический шаг - попытаться csharp изменить их для достижения asp.net желаемой функциональности.
Пользовательский элемент управления (предоставлено Dan Herbert's answer)
ПРИМЕЧАНИЕ. Это основано на коде Дэна, поэтому вся заслуга принадлежит ему.
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ModernControls
{
[ParseChildren]
public class ModernButton : Button
{
public new string Text
{
get { return (string)ViewState["NewText"] ?? ""; }
set { ViewState["NewText"] = value; }
}
public string Value
{
get { return base.Text; }
set { base.Text = value; }
}
protected override HtmlTextWriterTag TagKey
{
get { return HtmlTextWriterTag.Button; }
}
protected override void AddParsedSubObject(object obj)
{
var literal = obj as LiteralControl;
if (literal == null) return;
Text = literal.Text;
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.Write(Text);
}
}
}
Я .cs-file сократил класс до минимума html и переработал его, чтобы div добиться той же функциональности html-tag с минимальным количеством webpage кода. Я также добавил пару c#.net улучшений. А именно:
- Удалить атрибут
PersistChildren
(кажется ненужным) - Удалить переопределение
TagName
(кажется ненужным) - Удалите декодирование HTML из
Text
(базовый класс уже обрабатывает это) - Оставьте
OnPreRender
без изменений; вместо этого заменитьAddParsedSubObject
(проще) - Упростите
RenderContents
переопределение - Добавить свойство
Value
(см. ниже) - Добавьте пространство имен (чтобы включить образец директивы @ Register)
- Добавьте необходимые
using
директивы
Свойство htmlbutton Value
просто обращается к старому asp-net свойству Text
. Это связано с divs тем, что собственный элемент c#.net управления Button в любом aspdotnet случае отображает атрибут visual-c# value
(с Text
в качестве его значения). Поскольку divs value
является допустимым атрибутом div элемента , я решил включить asp.net-website для него свойство.
Источник
<%@ Register TagPrefix="mc" Namespace="ModernControls" %>
Search
Вывод
Плюсы
- Выглядит нормально
- Отображает правильный элемент
-
Command
событие; СвойстваCommandName
иCommandArgument
- Не обрабатывает навязчивый JavaScript и не полагается на него.
Минусы
- Нет (кроме того, что он не является встроенным элементом управления)
c#
asp.net
html
htmlbutton
Как я могу использовать тег кнопки с ASP.NET?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.