установить кнопку ссылки как кнопку по умолчанию для панели asp: в asp.net

Возможный дубликат:
Ссылка на кнопку на странице и установить ее как кнопку по умолчанию, нормально работать в IE, но не в Mozila

Как установить кнопку ссылки в качестве кнопки по умолчанию для панели asp: в asp.net? Я знаю, что кнопка может быть установлена ​​по умолчанию, но мое приложение использует кнопки ссылок для всех форм. Любые предложения, как это можно сделать.

РЕДАКТИРОВАТЬ:

Теперь я попробовал это, он работает и в firefox, но моя проверка javascript (то есть) на клиенте моей кнопки ссылки не работает, почему?

var __defaultFired = false;

        function WebForm_FireDefaultButton(event, target) {
            var element = event.target || event.srcElement;

            if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) {
                var defaultButton;

                if (__nonMSDOMBrowser)
                    defaultButton = document.getElementById(target);
                else
                    defaultButton = document.all[target];

                if (defaultButton) {
                    if (typeof (defaultButton.click) != "undefined")
                        defaultButton.click();
                    else
                        eval(unescape(defaultButton.href.replace("javascript:", "")));

                    event.cancelBubble = true;

                    if (event.stopPropagation) event.stopPropagation();
                    return false;
                }
            }
            return true;
        }

Второе РЕДАКТИРОВАНИЕ:

Я смог заставить работать свой настраиваемый элемент управления Linkbutton, но не смог подключить к нему OnClientClick. Источник using-panel- defaultbutton-property-with-linkbutton-control-in-asp-net.

и я сделал это,

<%@ Register Namespace="App_Code" TagPrefix="ac" %>
<asp:Label runat="server" ID="lblHello" />
<asp:Panel runat="server" DefaultButton="lbHello">
    First name: <asp:TextBox runat="server" ID="txtFirstName" />
    <ac:LinkButtonDefault ID="lbHello" runat="server" Text="Click me" 
        OnClientClick="javascript:alert('hai');" OnClick="lbHello_Click" />
</asp:Panel>

Почему не работает функция My Clientside? Любое предложение.


person ACP    schedule 27.08.2010    source источник


Ответы (4)


Вместо использования настраиваемого элемента управления вы можете использовать простой подход, добавив атрибут для обработки события onKeyPress текстового поля. Это правильно обрабатывает нажатие Enter из текстового поля и запуск события LinkButton. Обратной стороной этого подхода является то, что в Firefox не будет запускаться какое-либо событие LinkButton OnClientClick, что связано с проблемой, описанной в том сообщении блога, на которое вы ссылаетесь. Он сработает только тогда, когда пользователь фактически щелкнет ссылку с помощью мыши. Однако в IE он будет запускаться как из текстового поля, так и при прямом нажатии.

Решение №1. Код для добавления атрибута следующий:

protected void Page_Load(object sender, EventArgs e)
{
    txtFirstName.Attributes.Add("onKeyPress",
        "javascript:if (event.keyCode == 13) __doPostBack('" + lbHello.ClientID + "','')");
}

Попробуйте это и посмотрите, соответствует ли это вашим потребностям. Просто помните об ограничении, которое я описал ранее.

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

Решение №2 - Код для добавления функции и ее регистрации следующий:

protected void Page_PreRender(object sender, EventArgs e)
{
    string addClickFunctionScript = @"function addClickFunction(id) {
           var b = document.getElementById(id);
           if (b && typeof(b.click) == 'undefined')
             b.click = function() {
               var result = true;
               if (b.onclick) result = b.onclick();
               if (typeof(result) == 'undefined' || result)
                 eval(b.getAttribute('href'));
             }
         };";

    string clickScript = String.Format("addClickFunction('{0}');", lbHello.ClientID);

    Page.ClientScript.RegisterStartupScript(this.GetType(), "addClickFunctionScript", addClickFunctionScript, true);
    Page.ClientScript.RegisterStartupScript(this.GetType(), "click_" + lbHello.ClientID, clickScript, true);
}

Разметка страницы - разметка страницы одинакова для обоих вышеупомянутых решений:

<asp:Label runat="server" ID="lblHello" />
<asp:Panel ID="Panel1" runat="server" DefaultButton="lbHello">
    First name:
    <asp:TextBox runat="server" ID="txtFirstName" />
    <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click"                 
         OnClientClick="javascript:alert('Hello, World!');"/>
</asp:Panel>

В обоих случаях настраиваемый элемент управления не требуется для достижения такой функциональности. Будь проще.

person Ahmad Mageed    schedule 02.09.2010
comment
Я наградил вас этим ... Еще одно сомнение в том, как сделать это многоразовым для всех моих aspx-страниц, на которых есть разные кнопки ссылок ... - person ACP; 03.09.2010
comment
помогите мне в этой http://stackoverflow.com/questions/3642269/reusable-page-prerender-function-in-asp-net - person ACP; 04.09.2010
comment
@Pandiya Я отправил ответ на ваш новый вопрос. Требовался подробный пост, отсюда и задержка. Надеюсь, это укажет вам правильное направление. - person Ahmad Mageed; 06.09.2010

Взгляните на это

<asp:Panel runat="server" DefaultButton="lbHello">
    First name: <asp:TextBox runat="server" ID="txtFirstName" />
    <asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click" />
</asp:Panel>

Остальной ответ можно найти здесь. В нем показано, как решить проблему, возникающую с FireFox.
http://kpumuk.info/asp-net/using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net./

person Chase Florell    schedule 27.08.2010
comment
я пробовал то же самое, но это не работает в firefox - person ACP; 27.08.2010
comment
любое предложение, чтобы заставить его работать в firefox - person ACP; 27.08.2010
comment
Извините но нет. Похоже, что этот пост отвечает на вопрос firefox, но, возможно, более поздняя версия FF повторно ломает код ... не уверен. - person Chase Florell; 27.08.2010

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

jQuery(document).ready(function () {
    jQuery('#<%= txtFirstName.ClientID %>').keypress(function (event) {
        if (event.keyCode == 13) {
            eval($('#<%=lbHello.ClientID %>').attr('href'));
        }
    });
});

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

person Dofs    schedule 18.11.2010

Видеть это

Ссылка на странице и установить ее как кнопку по умолчанию, работать нормально в IE, но не в Mozila

Ответ на фиктивную кнопку - это самое чистое решение IMO.

person Steven Stefanik    schedule 29.12.2011