जब मैं एंटर दबाता हूं तो लॉगिन नियंत्रण बटन सबमिट करें

मेरे पास एक एएसपी.NET वेब पेज है जिसमें लॉग इन कंट्रोल है। जब मैं एंटर दबाता हूं, तो लॉगिन बटन आग नहीं होता है; इसके बजाय पेज सबमिट करता है, कुछ नहीं कर रहा है।

मुझे ऑनलाइन मिला है कि मानक समाधान एक पैनल में लॉगिन नियंत्रण संलग्न है, फिर पैनल डिफ़ॉल्ट बटन सेट करें। लेकिन जाहिर है कि अगर पृष्ठ का मास्टर पेज है तो यह बहुत अच्छा काम नहीं करता है। मैंने कोड में डिफ़ॉल्ट बटन को नियंत्रण .ID, नियंत्रण के साथ सेट करने का प्रयास किया है। क्लाइंट आईडी, और नियंत्रण । UnicID, और प्रत्येक मामले में I प्राप्त:

पैनल नाम का डिफ़ॉल्ट बटन आईबूटन नियंत्रण प्रकार के नियंत्रण की आईडी होना चाहिए।

मुझे यकीन है कि जावास्क्रिप्ट के साथ ऐसा करने का एक तरीका है, लेकिन यदि संभव हो तो मैं वास्तव में सादे पुराने सी # कोड के साथ ऐसा करना चाहता हूं। क्या यह संभव है?

22
मैं डर नहीं यह करता हूं, लेकिन यह मुझे बंद कर देता है कि कोड में ऐसा करने का एक तरीका होना चाहिए और मैं यह नहीं समझ सकता कि यह क्या है।
जोड़ा लेखक Ryan Lundy, स्रोत
इस मामले में जावास्क्रिप्ट से डरें। यह आपको ज्यादा सिरदर्द और समय बचाएगा।
जोड़ा लेखक 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"

असल में, आप डिफॉल्ट बटन को केवल फॉर्म स्तर पर ही नहीं, बल्कि व्यक्तिगत पैनल स्तर पर भी परिभाषित कर सकते हैं, जब तक कि फ़ोकस पैनल के भीतर न हो, पैनल के लिए डिफ़ॉल्ट बटन का उपयोग किया जाएगा यदि आप "एंटर" दबाते हैं

33
जोड़ा
आपका बचाया लाखों जीवन !!!
जोड़ा लेखक Sarawut Positwinyu, स्रोत
@MikeC। बस आपको यह बताने के लिए चाहते हैं कि मेरे लिए उपयोगी है: डी
जोड़ा लेखक Sarawut Positwinyu, स्रोत
इमेजबटन का उपयोग करने वाले किसी और के लिए बस एक एफवाईआई ... आपको डिफॉल्टबटन = "लॉगिन $ लॉगिन इमेज बटन" का उपयोग करने की आवश्यकता होगी।
जोड़ा लेखक Mike Cole, स्रोत
यह काम करता है, लेकिन किसी कारण से मैं इसे कोड में नहीं कर सकता। न तो आईडी और न ही क्लाइंट आईडी और न ही अद्वितीय आईडी पैनल की डिफ़ॉल्ट बटन संपत्ति के लिए सही आईडी प्रारूप उत्पन्न करता है।
जोड़ा लेखक Ryan Lundy, स्रोत
हाँ, कोशिश की, और यह काम नहीं किया। FindControl वास्तव में काम करता है (मैं इसे डीबगर में देख सकता था), लेकिन किसी कारण से, डिफ़ॉल्ट बटन को एक विशेष आईडी प्रारूप की आवश्यकता होती है।
जोड़ा लेखक Ryan Lundy, स्रोत
क्या आपने ऐसा कुछ करने की कोशिश की है? ((लॉग इनफॉर्म.फिंडकंट्रोल ("लॉग इनबटन")) बटन के रूप में)। यूनिकिड
जोड़ा लेखक Vassili Altynikov, स्रोत
यह पता चला है कि आपको कोड-बैक में उसी मान का उपयोग करने की आवश्यकता है: pnlLogin.DefaultButton = "Login1LoginButton";
जोड़ा लेखक Vassili Altynikov, स्रोत
मैं पैनलों पर डिफ़ॉल्ट बटन के बारे में पूरी तरह से भूल गया हूँ। मुझे याद दिलाने के लिये धन्यवाद।
जोड़ा लेखक Rismo, स्रोत

मिश्रण मास्टर द्वारा शानदार उत्तर! अनिवार्य रूप से केवल पैनल का उपयोग करें। डीफॉल्ट बटन, लेकिन मैं इस बारे में भ्रम को साफ़ करना चाहता हूं कि आपको इसे वास्तव में सेट करने की आवश्यकता है। यह सिर्फ ".ID" या "UnnidID" नहीं है - दस्तावेज़ीकरण इस पर थोड़ा सा कमी है।

आपको इसे बटन के अनन्य आईडी पर सेट करना होगा, पैनल के नामकरण कंटेनर UniqueID के सापेक्ष । उदाहरण के लिए, यदि आपका पैनल अनन्य आईडी "बॉडी $ कंटेंट $ pnlLogin" है और आपका लॉगिन बटन का अनन्य आईडी "बॉडी $ कंटेंट $ ucLogin $ btnLogin" है (क्योंकि यह "ucLogin" नामक नियंत्रण में है) तो आपको पैनल सेट करना होगा। डिफॉल्ट बटन "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 + "','')")

पासवर्ड टेक्स्टबॉक्स में एक ऑनकेप एट्रिब्यूट जोड़ा गया है जो "एंटर" कुंजी दबाए जाने पर सबमिट बटन पर डूपोस्टबैक को मजबूर करेगा। यह सबमिट बटन पर क्लिक अनुकरण करता है।

4
जोड़ा
यह ठीक है कि मैं इसे कैसे करता हूं
जोड़ा लेखक Andy Brudtkuhl, स्रोत

लॉगिन बटन की तरह लगता है <input type = "button"> <input type = "submit"> के बजाय <input type = "button"> के रूप में बाहर निकल रहा है। आप हमेशा लॉगिन कंट्रोल टेम्पलेट कर सकते हैं और एक ही समय में भयानक डिफ़ॉल्ट मार्कअप से छुटकारा पाने के लिए सबमिट बटन जोड़ सकते हैं!

यदि आपको कुछ ठीक करने के लिए जावास्क्रिप्ट का उपयोग करना है तो गंभीरता से गलत है! (लेकिन फिर ऐसा लगता है जैसे आप इसे जानते हैं)

2
जोड़ा
फिर कमांड = "लॉगिन" को चाल संख्या करना चाहिए?
जोड़ा लेखक roryf, स्रोत
स्पष्टीकरण के लिए - उस विशेषता को अपने एएसपी में जोड़ें: बटन नियंत्रण जो बटन बटन है
जोड़ा लेखक roryf, स्रोत
विडंबना यह है कि लॉगिन बटन पहले ही टेम्पलेट हो चुका है।
जोड़ा लेखक Ryan Lundy, स्रोत

यो, मुझे नेट पर यह समाधान मिला, यह मेरे लिए काम किया।

 
 
 
 ...
 
 
 
 
2
जोड़ा

मान लें कि लॉगिन 1 आपके लॉगिन नियंत्रण की आईडी है।

सबमिट करने के लिए पृष्ठ पर कहीं भी 'एंटर' के लिए, अपने कोड में इनिट में जोड़ें:

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

लॉगिन नियंत्रण के अंदर केवल सबमिट करने के लिए 'एंटर' के लिए, लॉगिन नियंत्रण को एएसपी: पैनल और सेट में लपेटें पैनल पर DefaultButton = "लॉगिन 1 $ लॉगिन बटन"

दोनों दृष्टिकोण मास्टर पृष्ठों के साथ ठीक काम करते हैं।

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
जोड़ा

पैनल नियंत्रण के अंदर लॉगिन नियंत्रण को एम्बेड करके और पैनल नियंत्रण के अंदर बटन के parent $ ID पर पैनल के defaultbutton को सेट करके एक समाधान प्रदान किया जाता है। कोड है:




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



1
जोड़ा
यह तेज़ तरीका है, यह काम करता है !!
जोड़ा लेखक Emanuel Pirovano, स्रोत

उपर्युक्त पदों के लिए थोड़ा अधिक विवरण और निर्देश जोड़ने के लिए, यहां एक walkthrough है:

अपने लॉगिन नियंत्रण को लोड करने वाले किसी भी पेज के मार्कअप में, आपको दो स्थानों पर एचटीएमएल अपडेट करना होगा।

सबसे पहले, पृष्ठ के फॉर्म टैग में, आपको डिफ़ॉल्ट बटन सेट करने की आवश्यकता है। मैं नाम के साथ कैसे आया इसके लिए नीचे देखें।

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

(नामकरण: डॉलर के चिह्न से पहले ucLogin भाग आपके लॉगिन नियंत्रण की आईडी होना चाहिए, जैसा कि आपके पृष्ठ में आगे घोषित किया गया है। Btn सबमिट करने वाले भाग को बटन की आईडी होना चाहिए क्योंकि इसका नाम लॉगिन नियंत्रण के HTML में है)

इसके बाद, आपको पैनल में अपने लॉगिन नियंत्रण की घोषणा को लपेटने की ज़रूरत है, और इसे डिफॉल्टबटन संपत्ति भी सेट करें:

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

यह आपके लिए यह करना चाहिए।

1
जोड़ा