문제

ASP.NET의 내장 드롭 다운 목록을 서브 클래스하여 기능을 추가하고 내 페이지에서 사용할 수 있도록하고 싶습니다. USERCONTROL 로이 작업을 시도했지만 내부 드롭 다운 목록을 노출시키지 않는다는 것을 알았습니다 (논리적으로, 추측). 답을 찾기 위해 Google에 글을 썼지 만 아무것도 찾을 수 없습니다.

나는 실제 클래스를 작성하는 한, DropdownList에서 서브 클래스를 할 수 있지만 ASP.NET 페이지에 파일을 등록하고 소스보기에 사용할 수는 없습니다. 어쩌면 수업 시간에 속성이 없어 질까요?

어떤 아이디어?

도움이 되었습니까?

해결책

USERCONTROL이 아닌 사용자 정의 컨트롤에서 DropDownList를 확장하려고합니다.

MyLibrary라는 새로운 클래스 라이브러리 프로젝트를 만듭니다.

mydropdownlist.cs라는 클래스를 추가하십시오

namespace My.Namespace.Controls
{
[ToolboxData("<{0}:MyDropDownList runat=\"server\"></{0}:MyDropDownList>")]
public class MyDropDownList: DropDownList
{
    // your custom code goes here
    // e.g.
    protected override void  RenderContents(HtmlTextWriter writer)
    {
        //Your own render code
    }
}
}

라이브러리를 컴파일하면 웹 애플리케이션에서 라이브러리에 대한 참조를 추가 할 수 있습니다.

그리고 web.config의 tagprefix

    <add tagPrefix="my" namespace="My.Namespace.Controls" assembly="MyLibrary" />

이를 ASPX/ASCX에 추가 할 수 있습니다.

<my:MyDropDownList ID="myDDl" runat="server">
    ...
</my:MyDropDownList>

다른 팁

의견에서, 당신은 당신의 목표를 명확히합니다. "내가하고 싶은 유일한 것은 DDL에 항상 존재하는 첫 번째 값을 정의하는 초기 값 속성을 추가하는 것입니다."

이를 달성하기 위해 특별한 사용자 컨트롤 또는 사용자 정의 컨트롤을 만들 필요는 없다고 생각합니다.

종종 웹 앱 전체 에서이 코드를 사용하여 목록 컨트롤을 채우십시오. 목록 상단에 추가 목록이 추가 될지 여부와 해당 항목의 텍스트를 표시하는 부울을 통과합니다.

    public static void BindListControl (ListControl ctl, SqlDataReader dr,
        String textColumn, String valueColumn, bool addBlankRow, string blankRowText)
    {
        ctl.Items.Clear();
        ctl.DataSource = dr;
        ctl.DataTextField = textColumn;
        ctl.DataValueField = valueColumn;
        ctl.DataBind();

        if (addBlankRow == true) ctl.Items.Insert(0, blankRowText);
    }

예를 들어, 모든 드롭 다운 목록에 초기 값으로 빈 공백 또는 "도시 선택"과 같은 텍스트를 갖기를 원하는 경우 유용합니다.

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