所以我想做的是我经常在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" />
这里是buttonChooseAnother_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.如果有更好的方法,我会很高兴听到它
您可能想知道的一些事情是我需要能够访问当前的按钮我还使用switch语句在一个事件处理程序中处理它们。此外,我需要访问文本字段,以便我可以在另一个按钮单击事件上填写一个值。
编辑:它是Masterpage的子页面,只是fyi。
答案 0 :(得分:0)
按钮单击将导致回发,当页面重新加载时,会将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不匹配的文本框将在postack上重新设置为Visible =“false”:
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;
}
我认为你可能想重新审视你想要完成的事情,因为可能有更好的方法。
答案 1 :(得分:0)
我会使用Ajax执行此操作,并将按钮和文本框放在UpdatePanel中。
然后使用代码创建文本框。唯一复杂的部分是将文本框放在您想要的位置。为此,您需要使用占位符和CSS的组合。