Как создать кнопку Asp для отображения новых текстовых полей при нажатии - PullRequest
0 голосов
/ 29 июля 2011

Итак, что я хотел бы сделать, это то, что я часто вижу в веб-формах и т. Д., В основном в своей веб-форме я хочу предоставить пользователю возможность добавлять больше информации по мере необходимости. Например, я спрашиваю слово, но хочу разрешить ввод нескольких слов, имея кнопку, чтобы открывать дополнительное текстовое поле при каждом нажатии. Прямо сейчас я пытаюсь реализовать это, создав 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" />

а вот и кнопка Выбрать другой_клик

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 для обработки их в одном обработчике событий. Также мне нужен доступ к текстовым полям, чтобы я мог заполнить значение при следующем событии нажатия кнопки.

Редактировать: это подстраница мастер-страницы просто к сведению.

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

Я бы сделал это с Ajax и поместил бы кнопку и текстовые поля внутри UpdatePanel.

Затем создайте текстовые поля, используя код. Единственная сложная часть - это размещение текстовых полей там, где вы хотите. Для этого вам нужно будет использовать комбинацию заполнителя и CSS.

0 голосов
/ 29 июля 2011

Нажатие кнопки вызовет обратную передачу, которая при сбросе страницы сбросит значение CanonicalNum на 0. Я бы использовал Session для хранения CanonicalNum:

В вашем методе page_load добавьте:

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

В событии нажатия кнопки обновите объект Session новым значением после увеличения CanonicalNum:

Session["CanonicalNum"] = CanonicalNum;

Если вы хотите, чтобы текстовые поля оставались видимыми, вам нужно обновить свой buttonChooseAnother_Click, чтобы обработать это, в противном случае те из них, которые не соответствуют CanonicalNum, будут возвращены в 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;

}

Я думаю, что вы, возможно, захотите вернуться к тому, что вы пытаетесь достичь, поскольку, вероятно, есть лучший способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...