单击时如何创建Asp按钮以显示新文本框

时间:2011-07-29 16:45:06

标签: c# asp.net button textbox event-handling

所以我想做的是我经常在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。

2 个答案:

答案 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的组合。