إجبار مربع النص TargetControl على استخدام قيمة في AutocompleteExtender

StackOverflow https://stackoverflow.com/questions/250603

سؤال

أنا متأكد من أنني سأضطر إلى كتابة كود جافا سكريبت الداعم للقيام بذلك.لدي إعداد موسع الإكمال التلقائي الذي يحدد القيم من جدول قاعدة البيانات، عند إجراء التحديد، أود تعيين معرف القيمة المحددة على عنصر تحكم مخفي.يمكنني القيام بذلك عن طريق التعامل مع تغيير القيمة في مربع النص وإجراء اتصال محدد بقاعدة البيانات، حدد idCompany من الشركات حيث CompanyName = "قيمة مربع النص"؛

الشيء الأكثر أهمية هو تقييد قيم مربع النص الذي يمثل عنصر التحكم الهدف لموسع الإكمال التلقائي لاستخدام القيم من القائمة المنسدلة للإكمال التلقائي فقط.هل هذا ممكن مع تلك السيطرة، هل هناك أمثلة في مكان ما؟هل هناك عنصر تحكم أفضل للاستخدام (ضمن مجموعة أدوات التحكم في Ajax أو إطار عمل .net القياسي - وليس عنصر تحكم تابع لجهة خارجية)؟

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

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

هل كانت مفيدة؟

المحلول

ولم يتمكن أحد من إعطائي إجابة.لقد كانت هذه ملحمة مستمرة.بدأ الأمر عندما كنت أحاول العثور على الحل لا يستخدم القوائم المنسدلة لكميات كبيرة من البيانات.لقد واجهت مشاكل مع هذا مرات عديدة في المشاريع السابقة.يبدو أن هذا رمز عملي.الآن أريد أن أعرف كيفية توفير خاصية AutoPostBack، والسماح لبعض الأحداث، مثل SelectedValueChanged.وبسبب جافا سكريبت، سوف يتعارض مع عنصر تحكم آخر، إذا كان لدي أكثر من واحد منهم في نفس الصفحة.حسنًا، هذه بعض المشكلات المعروفة التي أتطلع إليها فيما يتعلق بالكود، ولكنها بداية وأفضل بالتأكيد من النظر إلى متصفح معلق لمدة 3 أو 4 دقائق بينما تقوم القائمة المنسدلة بتحميل 30 ألف عنصر من عناصر القائمة.

يفترض هذا الرمز وجود ملف asmx باستخدام أساليب البرنامج النصي GetCompanyListBySearchString وGetCompanyIDByCompanyName.

ملف أس بي إكس

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SelectCompany.ascx.cs" Inherits="Controls_SelectCompany" %>
<%@ Register TagPrefix="ajaxToolkit" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit" %>
<script language="javascript" type="text/javascript">
    var txtCompanyIDHiddenField = '<%= fldCompanyID.ClientID %>';
    var txtCompanyIDTextBox = '<%= txtCompany.ClientID %>';
    function getCompanyID() {
        if (document.getElementById(txtCompanyIDTextBox).value != "")
            CompanyService.GetCompanyIDByCompanyName(document.getElementById(txtCompanyIDTextBox).value, onCompanyIDSuccess, onCompanyIDFail);
    }
    function onCompanyIDSuccess(sender, e) {
       if (sender == -1)
           document.getElementById(txtCompanyIDTextBox).value = "";
       document.getElementById(txtCompanyIDHiddenField).value = sender;
    }
    function onCompanyIDFail(sender, e) {
        document.getElementById(txtCompanyIDTextBox).value = "";
        document.getElementById(txtCompanyIDHiddenField).value = "-1";
    }
    function onCompanySelected() {
        document.getElementById(txtCompanyIDTextBox).blur();
    }
</script>
<asp:TextBox ID="txtCompany" runat="server"  onblur='getCompanyID()' 
/><ajaxToolkit:AutoCompleteExtender runat="server" ID="aceCompany" CompletionInterval="1000" CompletionSetCount="10"
 MinimumPrefixLength="2"  ServicePath="~/Company/CompanyService.asmx" ServiceMethod="GetCompanyListBySearchString"
 OnClientItemSelected="onCompanySelected" TargetControlID="txtCompany" />
 <asp:HiddenField ID="fldCompanyID" runat="server" Value="0" />

الكود خلف

[System.ComponentModel.DefaultProperty("Text")]
[ValidationProperty("Text")] 
public partial class ApplicationControls_SelectCompany : System.Web.UI.UserControl

{
public string Text
{
    get { return txtCompany.Text; }
    set
    {
        txtCompany.Text = value;
        //this should probably be read only and set the value based off of ID to 
        // make certain this is a valid Company
    }
}
public int CompanyID
{
    get
    {
        int ret = -1; Int32.TryParse(fldCompanyID.Value, out ret); return ret;
    }
    set
    {
        fldCompanyID.Value = value.ToString();
        //Todo:  should set code to set the Text based on the ID to keep things straight
    }
}
}

نصائح أخرى

شكرا لمشاركتك هنا.من المفيد، مع ذلك، افتراض أن الجميع يعرف الإعداد للحصول على خدمة الويب التي يتم استدعاؤها بواسطة وظيفة جافا سكريبت.

آسف لكوني مبتدئًا جدًا، لكن لم أتمكن من الاتصال بخدمة الويب من جانب العميل.قرأت هذا التوثيق: http://msdn.microsoft.com/en-us/magazine/cc163499.aspx

علاوة على ذلك، وجدت منشورًا مثيرًا للاهتمام يشرح كيفية إنشاء/الحصول على زوج من قيمة الاسم وهو إلى حد كبير ما تتوقعه بقدر ما فهمت:

http://blogs.msdn.com/phaniraj/archive/2007/06/19/how-to-use-a-key-value-pair-in-your-autocompleteextender.aspx

آسف إذا أسأت فهمك، ولكني أحاول فقط توجيه الأشخاص الآخرين الذين يمرون بنفس الموقف.

شكرًا جزيلاً.

ويمكنك التحقق من قيمة اختيار من خلال محاصرة على الحدث ClientItemSelected والتأكد من أنها ليست فارغة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top