创建一个过滤器(继承自的类Stream
),将其分配给您的HttpContext.Response.Filter
属性,并在其中覆盖Write
方法,从生成的 html 中删除所有名称标签:)
请参阅此页面了解更多信息http://msdn.microsoft.com/en-us/library/system.web.httpresponse.filter.aspx http://msdn.microsoft.com/en-us/library/system.web.httpresponse.filter.aspx
Update
查看源代码TextBox
它表明名称实际上已添加到Attributes
-在渲染期间列出,因此应该有可能干扰渲染TextBox
class 并阻止添加此属性。这应该做
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);
}
}