إرسال زر التحكم في تسجيل الدخول عندما أضغط على Enter

لدي صفحة ويب ASP.NET مع عنصر تحكم تسجيل الدخول عليه. عندما اضغط على Enter ، لا يتم إطلاق زر تسجيل الدخول ؛ بدلا من ذلك تقدم الصفحة ، لا تفعل شيئا.

يتمثل الحل القياسي لهذا الذي وجدته على الإنترنت في إحاطة عنصر تحكم تسجيل الدخول في لوحة ، ثم تعيين الزر الافتراضي للوحة. ولكن يبدو أن ذلك لا يعمل جيدًا إذا كانت الصفحة تحتوي على صفحة رئيسية. لقد حاولت تعيين الزر الافتراضي في التعليمات البرمجية باستخدام التحكم .ID ، التحكم .ClientID ، و التحكم .UniqueID ، وفي كل حالة احصل على:

يجب أن يكون DefaultButton of panelName هو معرف عنصر التحكم من النوع IButtonControl.

أنا متأكد من أن هناك طريقة لإجراء ذلك باستخدام جافا سكريبت ، لكنني أرغب في فعل ذلك باستخدام رمز C# قديمًا إن أمكن. هل هو ممكن؟

22
أنا لا أخاف منه ، لكنه يوقظني أنه يجب أن يكون هناك طريقة لفعل ذلك في الكود ولا أستطيع معرفة ما هو.
وأضاف المؤلف Ryan Lundy, مصدر
لا تخشى JavaScript في هذه الحالة. سيوفر لك الكثير من الصداع والوقت.
وأضاف المؤلف StingyJack, مصدر

9 إجابة

This should be helpful: http://weblogs.asp.net/jgalloway/archive/2007/10/03/asp-net-setting-the-defaultbutton-for-a-login-control.aspx

يمكنك استخدام ما يلي للإشارة إلى الزر الموجود في قالب تحكم تسجيل الدخول:

DefaultButton="Login$LoginButton"

بشكل أساسي ، يمكنك تحديد DefaultButton ليس فقط على مستوى النموذج ، ولكن أيضًا على مستوى اللوحة الفردية ، طالما كان التركيز داخل اللوحة ، سيتم استخدام الزر الافتراضي للوحة إذا قمت بالضغط على "Enter"

33
وأضاف
لديك ملايين من الحياة المحفوظة !!!
وأضاف المؤلف Sarawut Positwinyu, مصدر
MikeC. أريد فقط أن أخبرك بأن ذلك مفيد بالنسبة لي: D
وأضاف المؤلف Sarawut Positwinyu, مصدر
مجرد FYI لأي شخص آخر يستخدم ImageButton ... سوف تحتاج إلى استخدام DefaultButton = "Login Login LoginImageButton".
وأضاف المؤلف Mike Cole, مصدر
هذا يعمل ، لكن لسبب ما لا أستطيع فعله في الكود. لا ينتج معرف أو ClientID أو UniqueID تنسيق المعرف الصحيح للخاصية DefaultButton للوحة.
وأضاف المؤلف Ryan Lundy, مصدر
نعم ، حاول ذلك ، ولم ينجح. FindControl يعمل بالفعل (يمكن أن أراه في المصحح) ، ولكن لسبب ما ، يتطلب DefaultButton تنسيق معرف خاص.
وأضاف المؤلف Ryan Lundy, مصدر
هل حاولت شيء من هذا القبيل؟ ((LoginForm.FindControl ("LoginButton")) كـ Button) .UniqueID
وأضاف المؤلف Vassili Altynikov, مصدر
وتبين أنك تحتاج ببساطة إلى استخدام نفس القيمة في التعليمات البرمجية الخلفية: pnlLogin.DefaultButton = "Login1LoginButton"؛
وأضاف المؤلف Vassili Altynikov, مصدر
لقد نسيت تماما عن DefaultButton على الألواح. شكرا لتذكيري.
وأضاف المؤلف Rismo, مصدر

إجابة رائعة بواسطة Blend Master ! بشكل أساسي ، استخدم Panel.DefaultButton ، ولكن أريد أن أوضح التشويش حول ما تحتاج إليه بالضبط لتعيينه. انها ليست مجرد ".ID" أو "يونيكويد" - الوثائق تفتقر إلى بعض الشيء في هذا الشأن.

يجب عليك تعيينها على UniqueID للزر ، بالنسبة إلى حاوية تسمية اللوحة UniqueID. على سبيل المثال ، إذا كان لوحك UniqueID هو "Body $ Content $ pnlLogin" وكان UniqueID الخاص بميزة تسجيل الدخول الخاص بك هو "Body $ Content $ ucLogin $ btnLogin" (لأنه داخل عنصر تحكم يسمى "ucLogin") فأنت بحاجة إلى تعيين Panel.DefaultButton إلى "ucLogin $ btnLogin".

يمكنك عمل ذلك في الكود كما يلي. (لم أتمكن من العثور على أي طريقة في مكتبة الصف لهذا ، ولكن اسمحوا لي أن أعرف إذا وجدت واحدة.)

void SetDefaultButton(Panel panel, IButtonControl button)
{
    string uniqueId = ((Control)button).UniqueID;
    string panelIdPrefix = panel.NamingContainer.UniqueID + Page.IdSeparator;

    if (uniqueId.StartsWith(panelIdPrefix))
    {
        uniqueId = uniqueId.Substring(panelIdPrefix.Length);
    }

    panel.DefaultButton = uniqueId;
}
8
وأضاف
عملت إجابة evgeny بالنسبة لي ، تقريبا نفس سيد المزج ولكن مع علامة الدولار المدرجة
وأضاف المؤلف Marbella Consulting, مصدر

يجب عليك إضافة شيء كهذا في تحميل الصفحة ...

txtPassword.Attributes.Add("onKeyPress", "javascript:if (event.keyCode == 13) __doPostBack('" + lnkSubmit.UniqueID + "','')")

يحتوي مربع نص كلمة المرور على سمة onKeyPress المضافة التي ستفرض doPostBack على الزر إرسال إذا تم الضغط على المفتاح "Enter". هذا يحاكي النقر على زر إرسال.

4
وأضاف
هذا بالضبط كيف أفعل ذلك
وأضاف المؤلف Andy Brudtkuhl, مصدر

يبدو أن زر تسجيل الدخول مثل بصيغة <input type = "button"> بدلاً من <input type = "submit"> . يمكنك دائما القالب LoginControl وإضافة زر الإرسال ، والتخلص من العلامات الافتراضية البشعة في نفس الوقت!

إذا كان لديك لاستخدام جافا سكريبت لإصلاح هذا شيء خطير للغاية! (ولكن بعد ذلك يبدو وكأنك تعرف هذا)

2
وأضاف
ثم إضافة الأوامر = "تسجيل الدخول" يجب أن تفعل خدعة لا؟
وأضاف المؤلف roryf, مصدر
للتوضيح - أضف تلك السمة إلى نقطة التركيز الخاصة بك: زر التحكم هو زر تسجيل الدخول
وأضاف المؤلف roryf, مصدر
ومن المفارقات ، زر تسجيل الدخول تم إعداده مسبقًا.
وأضاف المؤلف Ryan Lundy, مصدر

Yo ، لقد وجدت هذا الحل على الشبكة ، لقد نجحت في ذلك.

 
 
 
 ...
 
 
 
 
2
وأضاف

بافتراض تسجيل الدخول 1 هو معرف عنصر تحكم تسجيل الدخول الخاص بك.

لإدخال كلمة "إدخال" في أي مكان بالصفحة ، أضفها إلى init في codebehind:

protected void Page_Init(object sender, EventArgs e)
{
    this.Form.DefaultButton = Login1.FindControl("LoginButton").UniqueID;
}

بالنسبة لـ "Enter" للإرسال فقط عندما تكون داخل عنصر تحكم تسجيل الدخول ، قم بلف عنصر تحكم تسجيل الدخول في asp: Panel وقم بالتعيين DefaultButton = "Login1 $ LoginButton" على اللوحة

كلا النهجين يعمل بشكل جيد مع الصفحات الرئيسية.

2
وأضاف

Based on your good answers, made a custom control that
enables a Page to have several default buttons based on which panel which is in focus.
It overrides Panel's OnLoad method and DefaultButton property.

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);
    }

    /// 
/// 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". ///
 
    /// 
    /// 
    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;
        }
    }      
}
1
وأضاف

يتم توفير حل من خلال تضمين عنصر تحكم تسجيل الدخول داخل لوحة التحكم وتعيين defaultbutton للوحة إلى معرف $ الأصل للزر الموجود داخل التحكم في تسجيل الدخول. هناك الكود:




<table>
...
<tr>
<td></td>
</tr>
</table>



1
وأضاف
هذه هي الطريقة السريعة ، وأنها تعمل!
وأضاف المؤلف Emanuel Pirovano, مصدر

لإضافة مزيد من التفاصيل والإرشادات إلى المشاركات أعلاه ، في ما يلي جولة تفصيلية:

في ترميز أي صفحات تقوم بتحميل عنصر تحكم تسجيل الدخول الخاص بك ، تحتاج إلى تحديث html في مكانين.

أولاً ، في علامة نموذج الصفحة ، تحتاج إلى تعيين الزر الافتراضي. انظر أدناه لمعرفة كيف توصلت إلى الاسم.

<form id="form1" runat="server" defaultbutton="ucLogin$btnSubmit">

(التسمية: يجب أن يكون جزء ucLogin قبل علامة الدولار معرّفًا لعنصر التحكم في تسجيل الدخول الخاص بك ، كما هو موضح في صفحتك. يجب أن يكون الجزء btnSubmit هو معرف الزر كما هو مذكور في html control login)

بعد ذلك ، تحتاج إلى التفاف إعلان عنصر تحكم تسجيل الدخول الخاص بك في لوحة ، وتعيين الخاصية DefaultButton ، كذلك:

<!-- Login Control - use a panel so we can set the default button -->
                         
                                                         

يجب أن نفعل ذلك لك.

1
وأضاف