2009-06-17 17 views
9

मैं इसे टेक्स्ट करने के लिए टेक्स्टबॉक्स प्राप्त करने का प्रयास कर रहा हूं, जब भी फोकस खो देता है तो केवल तभी गोलीबारी की बजाए एक कीस्ट्रोक बनाया जाता है। मैंने सोचा कि AsyncPostBackTrigger जोड़ना यह करेगा लेकिन यह अभी भी काम नहीं कर रहा है। क्या मैं भी संभव करने की कोशिश कर रहा हूं? कोड के नीचे है:एएसपी.NET टेक्स्टबॉक्स को कैसे आग लगाना है AJAX UpdatePanel में टेक्स्ट चेंज इवेंट आग?

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Items.aspx.cs" MasterPageFile="~/MMPAdmin.Master" Inherits="MMPAdmin.Items" %> 
<asp:Content ID="content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1"> 
<asp:ScriptManager ID="sm_Main" runat="server" /> 
    <div style="left:10px;position:relative;width:100%;overflow:hidden"> 
     <asp:UpdatePanel ID="up_SearchText" runat="server"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="tb_Search" EventName="TextChanged" /> 
      </Triggers> 
      <ContentTemplate> 
       <div style="position:relative;float:left"> 
        <b style="font-size:xx-large">Items</b>(<a href="Item.aspx">Add New</a>) 
       </div> 
       <div style="right:25px;position:absolute; top:30px"> 
        Search: <asp:TextBox ID="tb_Search" runat="server" Width="200" OnTextChanged="UpdateGrid" AutoPostBack="true" /> 
       </div> 
       <br /> 
       <div> 
        <asp:GridView runat="server" AutoGenerateColumns="true" ID="gv_Items" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" /> 
       </div> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
</asp:Content> 

उत्तर

12
  • आप जब onkeyup जावास्क्रिप्ट का उपयोग करने के लिए उठाया है अपने पाठ बॉक्स नियंत्रण के लिए _postback() फ़ंक्शन को कॉल करने की जरूरत है।
  • हालांकि, चूंकि आपका टेक्स्टबॉक्स आपके अपडेट पैनल के अंदर है, इसलिए जब भी उपयोगकर्ता कुंजी को हिट करता है तो टेक्स्टबॉक्स फिर से प्रस्तुत किया जाएगा, जिससे कर्सर फोकस को खो देता है।
  • यह तब तक उपयोगी नहीं होगा जब तक कि आप अपडेटबॉक्स से अपना टेक्स्टबॉक्स प्राप्त न करें। यह आपके लिए काम कर सकता है, क्योंकि अपडेट पैनल थोड़ा धीमे होते हैं, फिर भी आपके पास उपयोगिता के मुद्दे हो सकते हैं। - मैं एक स्वत: पूर्ण घटक का उपयोग करने का सुझाव दूंगा।

पी.एस: वहाँ asp.net नियंत्रण टूलकिट में से एक है या आप जो मैं थोड़ा बेहतर हो पाया है jQuery स्वत: पूर्ण प्लगइन का उपयोग कर सकते हैं।

+2

बस @ smercer की प्रतिक्रिया में जोड़ने के लिए: onTextChange ईवेंट केवल पोस्टबैक पर आग लगती है - टेक्स्टबॉक्स पर अपडेट नहीं। ओपी क्या देख रहा है जावास्क्रिप्ट पर कुंजीपटल घटना के करीब है। @ सॉमेरर सही है कि आपका सर्वोत्तम शर्त उल्लेख किए गए घटकों में से एक है। –

+0

मुझे यह स्पष्ट नहीं है कि मैं जो करने की आवश्यकता है उसे पूरा करने के लिए मैं स्वतः पूर्ण घटक का उपयोग कैसे करूं। मैं टेक्स्ट बॉक्स के लिए ऑनकीप ईवेंट पर फ़ोकस उछालने के लिए जावास्क्रिप्ट का उपयोग करने की उम्मीद कर रहा था, लेकिन जैसा कि आपने कहा था कि टेक्स्टबॉक्स हर बार ध्यान केंद्रित करता है। यदि मैं अपडेट पैनल से टेक्स्टबॉक्स लेता हूं तो ईवेंट हर बार एक पोस्टबैक का कारण बनता है जब मैं कुछ टाइप करता हूं जो काम नहीं करेगा। क्या यह पुन: प्रस्तुत करने के बाद टेक्स्ट बॉक्स पर फ़ोकस असाइन करना संभव होगा? –

+1

जब मैं कहता हूं कि "बाउंस फोकस" है, तो मैं इस बारे में बात कर रहा हूं: फ़ंक्शन बाउंसफ़ोकस() { var element = document.getElementById ('<% = tb_Search.ClientID%>'); element.blur(); element.focus(); } –

0

सभी AsyncPostBackTrigger करता है सुनिश्चित करें कि है केवल पृष्ठ के उस भाग ताज़ा करता है जब घटना निकाल दिया जाता है, यह जब घटना निकाल दिया जाता है नहीं बदलता है।

मुझे लगता है कि आप जो चाहते हैं उसे करना संभव है, लेकिन आपको घटना को मैन्युअल रूप से आग लगाने के लिए कुछ जावास्क्रिप्ट कोड लिखना होगा ... और मैं यह काम करने के बारे में भी सोचना नहीं चाहता हूं।

0

न AJAX उपलब्धता की जांच करने के लिए नियंत्रित करता है का उपयोग की आवश्यकता है .. इसकी .. इसका इस्तेमाल करने के AJAX नियंत्रित करता है .. हम निम्नलिखित कोड का उपयोग कर सकते अनिवार्य नहीं है

<iframe> 
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" ontextchanged="TextBox1_TextChanged"></asp:TextBox> 

protected void TextBox1_TextChanged(object sender, EventArgs e) 
    { 
     RequiredFieldValidator1.ErrorMessage = ""; 
     Label1.Text = ""; 
     string name = TextBox1.Text.ToString(); 
     string constr = "data Source=MURALY-PC\\SQLEXPRESS; database=Online; Integrated Security=SSPI"; 
     SqlConnection con = new SqlConnection(constr); 
     con.Open(); 
     string query = "select UserName from User_tab where UserName='" + name + "'"; 
     SqlCommand cmd = new SqlCommand(query, con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     if (dr.Read()) 
     { 

      Label1.Text = "UserName Already Exists"; 
     } 
     else 
     { 
      Label1.Text = ""; 
      Label1.Text = "UserName Available"; 
     } 
     con.Close(); 


    } 
</iframe> 
+0

यह दिखाता नहीं है कि ग्रिड व्यू में डेटा कैसे अपडेट हो जाता है, तथापि। UpdatePanel का यही कारण है - न केवल टेक्स्टबॉक्स डेटा को टेक्स्ट अधिसूचना को ट्रिगर करने के लिए बदल रहा है, बल्कि परिवर्तन के परिणामस्वरूप ग्रिड व्यू को अद्यतन करने के लिए। यह सच है कि एक लेबल AJAX के बिना इस तरह के एक बदले फैशन में डेटा दिखा सकता है, लेकिन कभी-कभी यह ग्रिड व्यू के मुकाबले लेबल्स में डेटा की डेटाबेस टेबल जोड़ने के लिए बहुत कठिन होता है - जिसके लिए UpdatePanels की आवश्यकता होती है। – vapcguy

संबंधित मुद्दे