2011-07-29 62 views
0

所以我想要做的是我在webforms等上看到很频繁的东西,基本上在我的webform中我想授予用户添加更多信息的能力是必要的。例如,我要求输入一个单词,但我希望允许多个单词的输入,方法是每次点击一个按钮时都会显示一个额外的文本框。现在我试图实现它是通过创建3个文本框(和每个对应的按钮)留下第一个可见,但隐藏其余的。这个想法是那么全球varible其跟踪哪些文本应该被揭露出来,然后我运行一个switch语句和揭​​示相应的复选框:如何创建一个Asp按钮来显示新的文本框点击时

<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语句在一个事件处理程序中处理它们。此外,我需要访问文本字段,以便可以在另一个按钮单击事件时填写值。

编辑:它是一个主页面的子页面只是fyi。

回答

0

点击按钮会导致回发,当页面重新加载时,会将CanonicalNum重置为0。我会用会议来存储CanonicalNum:

在你的Page_Load方法,补充一点:

if (!Page.IsPostBack) 
{ 
    CanonicalNum = 0; 
    Session["CanonicalNum"] = CanonicalNum; 
} 
else 
{ 
    CanonicalNum = (int)Session["CanonicalNum"]; 
} 

在你点击按钮时,你增加后更新为新值Session对象CanonicalNum:

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; 

} 

我想你可能想重温一下你正在努力完成的事情,因为可能有更好的方法来做到这一点。

+0

是的,我认为有一个更好的方法来做到这一点,但我不知道如何正确地动态创建文本框的方式,我想。 – user843271

+0

工作很好,感谢我还是有点asp noob,但我觉得有什么东西正与我的柜台和一个尝试了一堆东西搞砸了,但我不知道会议。如果有的话,我仍然愿意提供更好的解决方案。 – user843271

0

我会用Ajax做到这一点,并将按钮和文本框放入UpdatePanel中。

然后使用代码创建文本框。唯一复杂的部分是将文本框放在你想要的地方。为此,您需要使用占位符和CSS的组合。

相关问题