задайте linkbutton като бутон по подразбиране за asp: panel в asp.net

Възможен дубликат:
Бутон за връзка на страницата и го задайте като бутон по подразбиране, работи добре в IE, но не и в Mozila

Как да задам linkbutton като бутон по подразбиране за asp: panel в 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>

Моята клиентска функция не работи защо? Всяко предложение.


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


Отговори (4)


Вместо да използвате персонализирана контрола, можете да използвате простия подход за добавяне на атрибут за обработка на събитието onKeyPress на текстовото поле. Това правилно обработва натискането на Enter от текстовото поле и задействането на събитието LinkButton. Недостатъкът на този подход е, че всяко LinkButton OnClientClick събитие няма да бъде задействано във Firefox, което е свързано с проблема, описан в публикацията в блога, към която сте се свързали. Ще се задейства само когато потребителят действително щракне върху връзката с мишката. В 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
помогнете ми с тази stackoverflow. com/questions/3642269/ - 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