【发布时间】:2015-10-09 05:05:28
【问题描述】:
我在我的一些代码中发现了一个问题,但无法找出原因。我正在使用 .Net 4.5。 谁能告诉我这两种情况的区别?我尝试了一些不同的东西,例如通过Page.ClientScript 或在正文 onload 事件上禁用的 javascript,但我没有得到我想要的(TextBox2 是“”,TextBox1 是“Hello,TextBox1”)。当我注释掉tmp.Enable = false 时,一切都很好。我希望能够禁用这两个控件,但仍然可以访问 Text 值。适用于“TextBox1”但不适用于“tmp”又名“TextBox2”。
在 Page_Load 期间创建 !IsPostBack 和 TextBox2 的原因是因为我正在动态创建 X 个控件并从数据读取器设置它们的值。然后它们可以由用户修改并保存到表中。一定有办法!
这篇文章听起来像是我的问题,但我得到的结果与他们不同。
ASP.Net ViewState doesn't work when Control become 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();
}
}
更新: 根据 haraman 的建议,我可以通过进行以下更改来使其正常工作:
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();
}
【问题讨论】:
-
在 button1_click 中查看您的代码,您正在使用
tmp.Text.ToString();和TextBox1.Text.ToString();。您在哪里使用这些值?这些必须采用语句格式,即将它们分配给变量或控制值。 -
这只是为了演示目的。在按钮中单击 tmp.Text.ToString() 返回“”,TextBox1.Text.ToString() 返回“Hello, TextBox1”。在我的示例中,我实际上并没有“使用”这些值,它只是通过调试器显示结果。
标签: c# asp.net .net-4.5 asp.net-4.5