문제

이를 위해 지원 자바 스크립트 코드를 작성해야 할 것이라고 확신합니다. 데이터베이스 테이블에서 값을 선택하는 AutoComplete Extender 설정이 있습니다. 선택이 이루어지면 숨겨진 컨트롤로 선택한 값의 ID를 설정하고 싶습니다. 텍스트 상자의 값 변경을 처리하고 데이터베이스를 선택하여 CompanyName = "The Text Box Value"가있는 회사에서 IDCompany를 선택하여이를 수행 할 수 있습니다.

가장 중요한 것은 AutoComplete Extender가 자동 완성 드롭 다운의 값 만 사용하도록 대상 대상이되는 텍스트 상자의 값을 제한하는 것입니다. 이것이 그 제어로 가능합니까? 어딘가에 예가 있습니까? AJAX 제어 툴킷 또는 표준 .NET 프레임 워크 내에서 타사 제어가 아닌 더 나은 컨트롤이 있습니까?

나는 JavaScript를 해결하려고 노력할 것이지만, 누군가가 유용한 링크가 있는지 확인하기 위해이 질문을 다시 확인할 것입니다. 나는 지난 밤에 꽤 오랫동안 인터넷 검색을 해왔다.

업데이트 : 답변이나 유용한 링크를 얻지 못했습니다. 몇 가지 실행 가능한 문제로 원하는 것을 수행하는 거의 수용 가능한 사용자 컨트롤을 게시했습니다.

도움이 되었습니까?

해결책

아무도 나에게 답을 줄 수 없었습니다. 이것은 진행중인 사가였습니다. 내가 찾으려고했을 때 시작되었습니다 솔루션은 다량의 데이터에 드롭 다운 목록을 사용하지 않습니다.. 이전 프로젝트에서 여러 번 문제가 발생했습니다. 이것은 실행 가능한 코드 인 것 같습니다. 이제 AutoPostback 속성을 공급하는 방법을 알고 SelectedValueChanged와 같은 일부 이벤트를 허용해야합니다. 그리고 JavaScript로 인해 같은 페이지에 하나 이상의 컨트롤이 있으면 다른 컨트롤과 충돌합니다. 글쎄, 그것은 내가 코드로보고있는 알려진 문제 중 일부이지만, 드롭 다운이 30k 목록 항목을로드하는 동안 3 ~ 4 분 동안 매달린 브라우저를 3 분 또는 4 분 동안 보는 것보다 시작하고 확실히 낫습니다.

이 코드는 스크립트 메소드 GetCompanylistBysearchString 및 GetCompanyIdByCompanyMame이있는 ASMX 파일이 있다고 가정합니다.

ASPX 파일

<%@ 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
    }
}
}

다른 팁

여기 게시에 감사드립니다. 그러나 유용하지만 모든 사람이 JavaScript 함수로 호출되는 웹 서비스를 얻기위한 설정을 알고 있다고 가정합니다.

초보자가되어서 죄송하지만, 클라이언트면에서 웹 서비스를 불러도 할 수 없었습니다. 이 문서를 읽었습니다. http://msdn.microsoft.com/en-us/magazine/cc163499.aspx

또한, 나는 내가 이해 한 한 당신이 기대하는 것과 거의 같은 이름 값 쌍을 만들거나 얻는 방법을 설명하는 흥미로운 게시물을 찾았습니다.

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

내가 당신을 오해한다면 죄송하지만, 같은 상황을 통과하는 다른 사람들을 인도하려고합니다.

정말 감사합니다.

ClientItemSelected 이벤트를 트래핑하여 선택 값을 확인하고 비어 있지 않은지 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top