2008-10-30 6 views
1

나는 이것을 수행하기 위해 지원되는 JavaScript 코드를 작성해야 할 것입니다. 선택을 만들 때 데이터베이스 테이블에서 값을 선택하는 자동 확장 Extender가 있습니다. 숨겨진 컨트롤에 선택된 값의 ID를 설정하고 싶습니다. 텍스트 상자의 값 변경을 처리하고 데이터베이스에 대한 선택 호출을 수행하면 할 수 있습니다. 회사에서 idCompany를 선택합니다. CompanyName = "텍스트 상자 값";AutocompleteExtender의 값을 사용하도록 TargetControl Textbox 강제 설정

가장 중요한 것은 autocomplete 익스텐더의 targetcontrol 인 텍스트 상자의 값을 자동 완성 드롭 다운 값만 사용하도록 제한하는 것입니다. 이 컨트롤로 가능합니까, 어딘가에 예제가 있습니까? 사용할 수있는 더 나은 컨트롤이 있습니까 (Ajax 컨트롤 툴킷 또는 표준 .net 프레임 워크 내에서 - 제 3 자 컨트롤이 아님)?

나는 몇몇 자바 스크립트를 해결하려고 노력할 것이지만,이 질문으로 다시 돌아가서 누군가 유용한 링크가 있는지 살펴볼 것입니다. 나는 지난 밤에 꽤 오랫동안 인터넷 검색을 해왔다.

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

답변

2

아무도 나에게 대답을 줄 수 없었다. 이것은 지속적인 사가입니다. 그것은 내가 solution not using drop down lists for large amounts of data을 찾으려고 할 때 시작되었습니다. 나는 이전 프로젝트에서 여러 번이 문제에 부딪쳤다. 이것은 실행 가능한 코드 인 것 같습니다. 이제 AutoPostBack 속성을 제공하고 SelectedValueChanged와 같은 일부 이벤트를 허용하는 방법을 알아야합니다. 그리고 javascript로 인해 같은 페이지에 둘 이상의 컨트롤이있는 경우 다른 컨트롤과 충돌합니다. 글쎄, 그게 내가 코드로보고있는 알려진 문제의 일부지만, 드롭 다운이 30k 목록 항목을로드하는 동안 3 ~ 4 분 동안 매달린 브라우저를 바라 보는 것보다 확실히 시작과 확실히 낫다.

이 코드는 GetCompanyListBySearchString 및 GetCompanyIDByCompanyName과 같은 스크립트 메서드가있는 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" /> 

CODE BEHIND

[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 
    } 
} 
} 
2

감사합니다. 그것은 유용하지만, 모든 사람들이 자바 스크립트 함수에 의해 호출 된 webservice를 얻을 수있는 설정을 알고 있다고 가정합니다.

soo newbie가되어서 미안하지만 클라이언트 측에서 호출 된 webservice를 가져올 수 없습니다. 내가 생성/내가 이해로 거의 당신이 지금까지 기대하고 무엇을 이름 값 쌍을 가져 오는 방법을 설명하는 흥미로운 게시물을 발견, 또한 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

미안하지만 당신을 오해하고 있지만, 나는 단지 같은 상황을 통과하는 다른 사람들을 인도하려고 노력하고 있습니다.

고마워요.

+0

나는 오늘 아침에 그 링크를 읽을 시간이있었습니다. 사용자가 제어 할 수있는 동안 msdn에서 블로그 링크를 읽는 것이 좋습니다. 당신의 답변에 감사드립니다. – stephenbayer

+0

업데이트로, 나는 같은 아이디어를 사용하여 다른 컨트롤에 링크 된 블로그 항목의 정보를 활용했습니다. 그것은 훌륭한 정보였습니다. – stephenbayer

0

ClientItemSelected 이벤트를 트랩하여 선택 값을 확인하고 비어 있지 않은지 확인합니다.

관련 문제