C# 控件启用=假文本框释放值时,Viewstate不工作的某些情况
我在我的一些代码中发现了一个问题,无法找出原因。我正在使用.NET4.5。有人能告诉我这两种情况的区别吗?我尝试了一些不同的东西,比如通过C# 控件启用=假文本框释放值时,Viewstate不工作的某些情况,c#,asp.net,.net-4.5,asp.net-4.5,C#,Asp.net,.net 4.5,Asp.net 4.5,我在我的一些代码中发现了一个问题,无法找出原因。我正在使用.NET4.5。有人能告诉我这两种情况的区别吗?我尝试了一些不同的东西,比如通过Page.ClientScript或在body onload事件上禁用javascript,但我没有得到我想要的(TextBox2是“”,TextBox1是“你好,TextBox1”)。当我注释掉tmp.Enable=false时,一切正常。我希望能够禁用这两个控件,但仍然可以访问文本值。适用于“TextBox1”,但不适用于“tmp”即“TextBox2”
Page.ClientScript
或在body onload事件上禁用javascript,但我没有得到我想要的(TextBox2是“”,TextBox1是“你好,TextBox1”)。当我注释掉tmp.Enable=false
时,一切正常。我希望能够禁用这两个控件,但仍然可以访问文本值。适用于“TextBox1”,但不适用于“tmp”即“TextBox2”
原因是什么!在页面加载期间创建的IsPostBack和TextBox2是因为我正在动态创建X个控件,并从datareader设置它们的值。然后,用户可以修改它们并将其保存到表中。一定有办法
这篇文章听起来像是我的问题,但我得到的结果与他们不同。尝试使用属性 只读 在文本框的上下文中,readonly允许用户将焦点设置为 并选择并复制文本,但不修改它。禁用的文本框 不允许任何交互 当您有希望用户查看和查看的数据时,请使用ReadOnly 复制,但不修改。当您输入数据时,请使用禁用的文本框 显示不适用于对话框的当前状态或 窗户 启用: 获取或设置一个值,该值指示控件是否可以响应 用户交互
您应该考虑使用<代码> RealOnt= Trime< /Cord>,而不是<代码>启用= false 。 禁用的表单元素的值不会传递给处理器方法。有关详细信息,请参阅
编辑:关于代码的添加用你的代码创建了一个测试用例,发现我只是误读了你的代码。下面是代码中发生的情况:
tmp已重新创建(但TextBox1已存在且未重新创建)
这意味着tmp中没有文本(未重新创建TextBox1,保留其文本)
在这篇文章中可以找到一种实用的方法在button1\u单击查看您的代码,您正在使用
tmp.Text.ToString()
和TextBox1.Text.ToString()代码>。您在哪里使用这些值?它们必须采用语句格式,即将它们分配给变量或控制值。这只是为了演示。在按钮中,单击tmp.Text.ToString()返回“”,TextBox1.Text.ToString()返回“您好,TextBox1”。在我的示例中,我并没有实际“使用”这些值,只是通过调试器显示结果。那么为什么可以访问TextBox1的值呢?您链接的文章没有提到asp.net的Enable。我的问题是关于这一点,而不是html禁用vs只读。是的!!谢谢你,先生!:)昨晚我看到了这个问题,认为这就是问题所在,但我想不出来。现在一切正常。再次感谢!我认为只读将实现我的目标。。然而,我想知道为什么当enable=false时返回TextBox1的值,而TextBox2的值为“”只读时要花费更多的精力,因为在我的实际代码中,我在textbox上附加了一个jQuery日期选择器。因此,用户可以“编辑”内容。Enable=false更容易实现我想要的功能。但是,仅当在页面加载期间未创建/添加文本框时。
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function t() {
document.getElementById("TextBox1").disabled = true;
document.getElementById("TextBox2").disabled = true;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel runat="server" ID="Panel1">
<asp:TextBox runat="server" ID="TextBox1"></asp:TextBox>
<asp:Button runat="server" ID="button1" OnClick="button1_Click" />
</asp:Panel>
</div>
</form>
</body>
</html>
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) { TextBox1.Text = "Hello, TextBox1"; }
TextBox1.Enabled = false;
TextBox tmp = new TextBox();
tmp.ID = "TextBox2";
if (!IsPostBack) { tmp.Text = "Hello, TextBox2"; }
tmp.Enabled = false;
Panel1.Controls.Add(tmp);
}
protected void button1_Click(object sender, EventArgs e)
{
TextBox tmp = ((TextBox)Page.FindControl("TextBox2"));
if(tmp != null)
{
tmp.Text.ToString();
}
TextBox1.Text.ToString();
}
}
protected void Page_PreInit(object sender, EventArgs e)
{
TextBox tmp = new TextBox();
tmp.ID = "TextBox2";
Panel1.Controls.Add(tmp);
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) { TextBox1.Text = "Hello, TextBox1"; }
TextBox1.Enabled = false;
if (!IsPostBack) { ((TextBox)Page.FindControl("TextBox2")).Text = "Hello, TextBox2"; }
((TextBox)Page.FindControl("TextBox2")).Enabled = false;
}
protected void button1_Click(object sender, EventArgs e)
{
TextBox tmp = ((TextBox)Page.FindControl("TextBox2"));
if (tmp != null)
{
tmp.Text.ToString();
}
TextBox1.Text.ToString();
}