C# 如何告诉ASP.NET不要在请求中插入控件的值?

C# 如何告诉ASP.NET不要在请求中插入控件的值?,c#,.net,asp.net,request,C#,.net,Asp.net,Request,我的问题可能听起来很奇怪,但是,这是我需要做的事情。 考虑有一个文本框,并且希望它不进入服务器端,它必须留在客户端,控件不能对请求进行部分处理。 如何做到这一点 谢谢在文本框的ASP标记代码中,设置EnableViewState=false <asp:TextBox id="foo" EnableViewState="false" /> 当您在代码隐藏中检查foo.Text时,它将是初始值空字符串 如果您根本不希望该控件存在于服务器上,请使用普通HTML而不是ASP.NET标记:

我的问题可能听起来很奇怪,但是,这是我需要做的事情。 考虑有一个文本框,并且希望它不进入服务器端,它必须留在客户端,控件不能对请求进行部分处理。 如何做到这一点

谢谢

在文本框的ASP标记代码中,设置EnableViewState=false

<asp:TextBox id="foo"  EnableViewState="false" />
当您在代码隐藏中检查foo.Text时,它将是初始值空字符串

如果您根本不希望该控件存在于服务器上,请使用普通HTML而不是ASP.NET标记:

<input type="text" />
但是,从技术上讲,文本框值仍然包含在HTTP POST回发中。浏览器总是在POST上发送表单值

要从POST中排除某些元素,可以使用AJAX进行选择性POST。

在文本框的ASP标记代码中,设置EnableViewState=false

<asp:TextBox id="foo"  EnableViewState="false" />
当您在代码隐藏中检查foo.Text时,它将是初始值空字符串

如果您根本不希望该控件存在于服务器上,请使用普通HTML而不是ASP.NET标记:

<input type="text" />
但是,从技术上讲,文本框值仍然包含在HTTP POST回发中。浏览器总是在POST上发送表单值


要从POST中排除某些元素,您可以使用AJAX进行选择性POST。

您不能拥有不回发的服务器控件。要做到这一点,唯一的方法是使用,并将其放在asp.net表单之外。我无法想象你为什么要这么做

编辑:


我突然想到,您也可以使用javascript将文本框移动到asp.net表单之外,但将其保留为一个文本框,以便您可以在服务器端设置属性。

您不能拥有不回发的服务器控件。要做到这一点,唯一的方法是使用,并将其放在asp.net表单之外。我无法想象你为什么要这么做

编辑:


我突然想到,您也可以使用javascript将文本框移动到asp.net表单之外,但将其保留为一个文本框,以便您可以在服务器端设置属性。

要做到这一点,您需要使用前面提到的普通HTML控件,但这仍然是HTTP请求的一部分,可以通过Request.form获得。我相信禁用的控件不包括在HTTP请求中,所以要么从一开始就禁用该控件,要么在表单提交时通过javascript禁用它

编辑:
值得一试的是,在表单提交时禁用EnableViewState=false的asp:TextBox。

要做到这一点,您需要使用前面提到的普通HTML控件,但这仍然是HTTP请求的一部分,可以通过Request.form获得。我相信禁用的控件不包括在HTTP请求中,所以要么从一开始就禁用该控件,要么在表单提交时通过javascript禁用它

编辑:
值得一试的是,在表单提交时禁用EnableViewState=false的asp:TextBox。

在表单提交时使用JavaScript将文本框从DOM中删除如何

下面是一个jQuery示例。用类标记文本框,例如doNotSubmit


在Firebug中选中此项,文本框未提交。但是,您引入了JavaScript依赖项,如果有人在没有脚本的情况下运行,文本框仍将被提交。不知道这是否是您的问题。

在表单提交时使用JavaScript从DOM中删除文本框如何

下面是一个jQuery示例。用类标记文本框,例如doNotSubmit


在Firebug中选中此项,文本框未提交。但是,您引入了JavaScript依赖项,如果有人在没有脚本的情况下运行,文本框仍将被提交。不知道这是否是您的问题。

为什么不使用简单的HTML文本输入呢?如果您不想与服务器上的数据交互,通常使用标准HTML控件。通过使用Page.Request.Form发回服务器后,您仍然可以访问数据服务器端。如果您根本不希望数据返回,请不要使用输入控件或使用AJAX仅发布您需要的数据。另一种解决方法是使用客户端代码转换删除项,或将其更改为其他内容,例如在触发回发之前看起来像输入的标签。使用jQuery很容易。Zachary:我同意AJAX,但是关于你的第二个想法:回发后标签不会丢失吗?是的,但是HTML控件或没有viewstate的服务器控件也会丢失。如果回发后需要数据,可以使用cookie或重新填充服务器。那么为什么不使用简单的HTML文本输入?如果不想与服务器上的数据交互,通常使用标准HTML控件。通过使用Page.Request.Form发回服务器后,您仍然可以访问数据服务器端。如果您根本不想让数据返回,请不要使用输入控件或AJAX

另一个解决方法是使用客户端代码转换删除项,或者在触发回发之前将其更改为其他内容,例如,看起来像输入的标签。使用jQuery很容易。Zachary:我同意AJAX,但是关于你的第二个想法:回发后标签不会丢失吗?是的,但是HTML控件或没有viewstate的服务器控件也会丢失。如果回发后需要数据,可以使用cookie或重新填充服务器。这不会阻止回发值。本:你说得对。我甚至不确定是否有可能有选择地从回发中排除页面的某些部分[如Zachary所说,使用AJAX除外]。这不会阻止回发值。本:你说得对。我甚至不确定是否可以有选择地从回发中排除页面的某些部分(除了使用AJAX,正如Zachary所说的)。您不能拥有不回发的服务器控件。设置EnableViewState=false不正是这样吗?奇怪。我知道如果EnableViewState=false,它不会将更新的内容推送到ViewState。但ViewState仍将包含其原始值?否,但该值位于Request.Form集合中,可以在服务器端访问。有趣。谢谢你花时间为我澄清这一点!使用javascript将asp:TextBox移动到asp.NET表单之外会导致viewstate无效。不能有不回发的服务器控件。设置EnableViewState=false不正是这样吗?奇怪。我知道如果EnableViewState=false,它不会将更新的内容推送到ViewState。但ViewState仍将包含其原始值?否,但该值位于Request.Form集合中,可以在服务器端访问。有趣。谢谢你花时间为我澄清这一点!使用javascript将asp:TextBox移动到asp.NET表单之外会导致viewstate无效。