Определите во время выполнения, какую кнопку отправки использовать - PullRequest
1 голос
/ 14 мая 2009

net webpage, имеет два поля поиска с отдельными кнопками отправки.

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

Как я могу это сделать?

В настоящее время мой код:

    <label for="ctl00_cpMain_txtEmployeeSearch">Employee Name:</label><asp:TextBox id="txtEmployeeSearch" runat="server" CssClass="TextBox" />
    <asp:Button ID="btnEmployeeSeach" runat="server" Text="Search" onclick="btnEmployeeSeach_Click" CssClass="button" />


    <label for="ctl00_cpMain_txtCustomerSearch">Customer Name:</label><asp:TextBox id="txtCustomerSearch" runat="server" CssClass="TextBox" />
    <asp:Button ID="btnCustomerSeach" runat="server" Text="Search" onclick="btnCustomerSeach_Click" CssClass="button" />

Ответы [ 5 ]

2 голосов
/ 14 мая 2009

Посмотрите на свойство DefaultButton. Вы можете обернуть каждую из этих пар меток / кнопок на панели и установить для свойства значение btnEmployeeSearch и btnCustomerSearch, соответственно.

http://forums.asp.net/t/985791.aspx

<asp:Panel DefaultButton="btnEmployeeSearch" runat="server" id="Panel">
    <label for="ctl00_cpMain_txtEmployeeSearch">Employee Name:</label><asp:TextBox id="txtEmployeeSearch" runat="server" CssClass="TextBox" />
    <asp:Button ID="btnEmployeeSeach" runat="server" Text="Search" onclick="btnEmployeeSeach_Click" CssClass="button" />
</asp:Panel>
2 голосов
/ 14 мая 2009

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

1 голос
/ 14 мая 2009

Вы можете заключить каждый раздел в панель и использовать его свойство defaultbutton, чтобы указать кнопку отправки для каждого текстового поля:

<asp:Panel runat="server" DefaultButton="btnEmployeeSeach">
    <label for="ctl00_cpMain_txtEmployeeSearch">Employee Name:</label><asp:TextBox id="txtEmployeeSearch" runat="server" CssClass="TextBox" />
    <asp:Button ID="btnEmployeeSeach" runat="server" Text="Search" onclick="btnEmployeeSeach_Click" CssClass="button" />
</asp:Panel>    
<asp:Panel runat="server" DefaultButton="btnCustomerSeach">
    <label for="ctl00_cpMain_txtCustomerSearch">Customer Name:</label><asp:TextBox id="txtCustomerSearch" runat="server" CssClass="TextBox" />
    <asp:Button ID="btnCustomerSeach" runat="server" Text="Search" onclick="btnCustomerSeach_Click" CssClass="button" />
</asp:Panel>

Как установить кнопку по умолчанию

0 голосов
/ 21 мая 2009

Вот расширение asp: Panel, которое позволяет странице иметь несколько кнопок по умолчанию
в зависимости от текущего фокуса.
Он переопределяет метод OnLoad и свойство DefaultButton.
Вы можете заключить поля и кнопки в отдельные пользовательские панели и запустить их DefaultButton в Page_Load () или On_Load ()

Вот пользовательский элемент управления:

public class DefaultButtonPanel:Panel
    {
        protected override void OnLoad(EventArgs e)
        {
            if(!string.IsNullOrEmpty(DefaultButton))
            {
                LinkButton btn = FindControl(DefaultButton) as LinkButton;
                if(btn != null)
                {
                    Button defaultButton = new Button {ID = DefaultButton.Replace(Page.IdSeparator.ToString(), "_") + "_Default", Text = " "};
                    defaultButton.Style.Add("display", "none");
                    PostBackOptions p = new PostBackOptions(btn, "", null, false, true, true, true, true, btn.ValidationGroup);
                    defaultButton.OnClientClick = Page.ClientScript.GetPostBackEventReference(p) + "; return false;";
                    Controls.Add(defaultButton);
                    DefaultButton = defaultButton.ID;
                }
            }
            base.OnLoad(e);
        }
        /// <summary>
        /// Set the default button in a Panel.
        /// The UniqueID of the button, must be relative to the Panel's naming container UniqueID. 
        /// 
        /// For example:
        ///    Panel UniqueID is "Body$Content$pnlLogin" 
        ///    Button's UniqueID is "Body$Content$ucLogin$btnLogin" 
        ///    (because it's inside a control called "ucLogin") 
        ///    Set Panel.DefaultButton to "ucLogin$btnLogin".
        /// </summary>
        /// <param name="panel"></param>
        /// <param name="button"></param>
        public override string DefaultButton
        {
            get
            {
                return base.DefaultButton;
            }
            set
            {
                string uniqueId = value;
                string panelIdPrefix = this.NamingContainer.UniqueID + Page.IdSeparator;
                if (uniqueId.StartsWith(panelIdPrefix))
                {
                    uniqueId = uniqueId.Substring(panelIdPrefix.Length);
                }
                base.DefaultButton = uniqueId;
            }
        }

    }
0 голосов
/ 14 мая 2009

Можете ли вы разделить его на две отдельные <form> с? Вы получите только одно из текстовых полей (без хитрости JavaScript), но, возможно, это не имеет значения в вашем приложении?

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