gpt4 book ai didi

asp.net - 如何从服务器控件中删除 'name' 属性?

转载 作者:太空狗 更新时间:2023-10-29 13:24:48 25 4
gpt4 key购买 nike

下面的asp.net控制端代码:

<asp:TextBox runat="server" ID="LimitTextBox" Text="20" ClientIDMode="Static" />

生成这样的 HTML 代码:

<input name="ctl11$ctl00$ctl02$TeamPlayerSelector$LimitTextBox" 
type="text" value="20" id="LimitTextBox">

ID 属性 - 是必需的,但如何删除“名称”属性?我不需要它,而且将它传输到用户浏览器也太长了。

如何防止“名称”属性的生成?谢谢

附言我在 ASP.NET 4.0 下工作

最佳答案

创建一个过滤器(继承自 Stream 的类),将其分配给您的 HttpContext.Response.Filter 属性,并在其中覆盖 Write 方法,从生成的 html 中删除所有名称标签 :)

查看此页面了解更多信息 http://msdn.microsoft.com/en-us/library/system.web.httpresponse.filter.aspx

更新

查看 TextBox 的源代码,它揭示了 Name 实际上是在渲染期间添加到 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);
}
}

关于asp.net - 如何从服务器控件中删除 'name' 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com