所以我想做的是我经常在webforms等上看到的东西,基本上在我的webform中,我想赋予用户添加更多必要信息的能力。例如,我要求输入一个单词,但我想允许输入多个单词,通过有一个按钮,每次点击它都会显示一个额外的文本框。现在我是如何试图实现它是通过创建3个文本框(和按钮对应于每一个)留下第一个可见,但隐藏其余的。我们的想法是用一个全局变量来跟踪应该显示哪个文本框然后在这个变量上运行一个switch语句显示相应的文本框:
<asp:TextBox ID="textBoxNewCanonical" runat="server"></asp:TextBox>
<asp:Button runat="server" ID="buttonFind" Text="Find" Visible="false" OnClick="buttonFind_OnClick" />
<asp:TextBox ID="textBoxNewCanonical1" Visible="false" runat="server"></asp:TextBox>
<asp:Button runat="server" ID="buttonFind1" Text="Find" Visible="false" OnClick="buttonFind_OnClick" />
<asp:TextBox ID="textBoxNewCanonical2" Visible="false" runat="server"></asp:TextBox>
<asp:Button runat="server" ID="buttonFind2" Text="Find" Visible="false" OnClick="buttonFind_OnClick" />
<asp:Button runat="server" ID="btnMultipleCanonical" Text="Choose Another Canoical" OnClick="buttonChooseAnother_Click" />
这里是按钮chooseanother_click
protected void buttonChooseAnother_Click(object sender, EventArgs e)
{
switch(CanonicalNum)
{
case 0:
textBoxNewCanonical1.Visible = true;
buttonFind1.Visible = true;
break;
case 1:
textBoxNewCanonical2.Visible = true;
buttonFind2.Visible = true;
break;
default:
break;
}
CanonicalNum = CanonicalNum+1;
}
CanonicalNum设置为0开始它似乎应该工作,但最终发生的是,当我点击按钮,它只是显示textBoxNewCanonical1,然后不做任何其他下次我点击。所以我的问题是双重的1. 谁能告诉我什么可能是错误的,我的代码和如何修复它2. 如果有更好的方法,我很乐意听听
你可能想知道的几件事是,我需要能够访问按钮目前我也使用一个开关语句来处理它们在一个事件处理程序。此外,我需要访问文本字段,以便我可以在另一个按钮单击事件上填写值。
编辑:这是一个母版的子页,只是供参考。
单击按钮将导致回发,这将在页面重新加载时将CanonicalNum重置为0。我会使用Session来存储CanonicalNum:
在你的page_load方法中添加:
if (!Page.IsPostBack)
{
CanonicalNum = 0;
Session["CanonicalNum"] = CanonicalNum;
}
else
{
CanonicalNum = (int)Session["CanonicalNum"];
}
在按钮单击事件中,在增加CanonicalNum:
之后用新值更新Session对象Session["CanonicalNum"] = CanonicalNum;
如果你想让文本框保持可见,你需要更新你的buttonChooseAnother_Click来处理这个问题,否则那些不匹配CanonicalNum的将被设置回visible = "false" on postack:
protected void buttonChooseAnother_Click(object sender, EventArgs e)
{
switch(CanonicalNum)
{
case 0:
textBoxNewCanonical1.Visible = true;
buttonFind1.Visible = true;
break;
case 1:
textBoxNewCanonical1.Visible = true;
buttonFind1.Visible = true;
textBoxNewCanonical2.Visible = true;
buttonFind2.Visible = true;
break;
default:
break;
}
CanonicalNum = CanonicalNum+1;
Session["CanonicalNum"] = CanonicalNum;
}
我认为你可能需要重新审视你想要完成的任务,因为可能有更好的方法。
我会用Ajax这样做,并将按钮和文本框放在UpdatePanel中。
然后使用代码创建文本框。唯一复杂的部分是将文本框放置在需要的位置。为此,您需要使用占位符和CSS的组合。