создайте Фильтр (класс, который наследует от Stream
), назначьте его вашему атрибуту HttpContext.Response.Filter
, и в нем вы перезапишите метод Write
, чтобы удалить все теги имен из сгенерированного html :)
См. Эту страницу для получения дополнительной информации http://msdn.microsoft.com/en-us/library/system.web.httpresponse.filter.aspx
Обновление
Глядя на исходный код для TextBox
, вы обнаруживаете, что имя фактически добавляется в список Attributes
во время рендеринга, поэтому должна быть возможность вмешиваться в рендеринг класса TextBox
и предотвращать использование этого атрибута. добавлено. Это должно сделать
public class NoNamesTextBox : TextBox
{
private class NoNamesHtmlTextWriter : HtmlTextWriter
{
public NoNamesHtmlTextWriter(TextWriter writer) : base(writer) {}
public override void WriteAttribute(string name, string value, bool fEncode)
{
if (name.Equals("name", StringComparison.OrdinalIgnoreCase)) return;
base.WriteAttribute(name, value, fEncode);
}
}
protected override void Render(HtmlTextWriter writer)
{
var noNamesWriter = new NoNamesHtmlTextWriter(writer);
base.Render(noNamesWriter);
}
}
Обновить еще раз
Как я мог забыть! Вам даже не нужно создавать подкласс вашего текстового поля. В asp.net вы можете определить, какой тип HtmlTextWriter вы хотите использовать для каждого элемента управления, поэтому вы можете просто настроить, чтобы каждый элемент управления TextBox использовал экземпляр вашего собственного NoNamesHtmlTextWriter, например,
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter
controlType="System.Web.UI.WebControls.TextBox"
adapterType="NoNamesTextBoxAdapter"
/>
</controlAdapters>
</browser>
</browsers>
public class NoNamesTextBoxAdapter : ControlAdapter
{
private class NoNamesHtmlTextWriter : HtmlTextWriter
{
public NoNamesHtmlTextWriter(TextWriter writer) : base(writer) { }
public override void WriteAttribute(string name, string value, bool fEncode)
{
if (name.Equals("name", StringComparison.OrdinalIgnoreCase)) return;
base.WriteAttribute(name, value, fEncode);
}
}
protected override void Render(HtmlTextWriter writer)
{
var noNamesRender = new HtmlTextWriter(writer);
base.Render(noNamesRender);
}
}