두 개의 드롭 다운이 상호 의존적 인 asp.net에서 editform을 어떻게 구축합니까?

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

  •  21-08-2019
  •  | 
  •  

문제

작은 문제가 있습니다. 사용자가 객체에서 속성을 편집 할 수있는 ASP.NET 응용 프로그램에서 편집 페이지를 작성하고 있습니다. 그룹의 양이 선택된 카테고리에 의존하는 두 개의 드롭 다운 (카테고리 및 그룹)이 있습니다. 내 목표는 올바른 범주 OG를 표시 한 다음 객체를 편집 한 다음 그룹 목록을로드하고 올바른 그룹을 선택하는 것입니다. 문제는 선택한 indexChanged 이벤트가 시작되지 않았다는 것입니다.

카테고리를 page_load에로드하고 카테고리를 채우면 코드가 다음과 같습니다.

protected void Page_Load(object sender, EventArgs e)
    { string editid= Request["edit"] == null ? null : Request["edit"].ToString();
        int id = Convert.ToInt32(editid);
        if (link == null)
        {
            link = BLLink.Load(id, blm);
        }
        if (!IsPostBack)
        {
            group = BLGroup.Load(link.GroupId, blm);
            category = BLCategory.Load(group.CategoryId, blm);

            List<BLCategory> categories = BLCategory.LoadAll();
            categoryDropDown.DataSource = categories;
            categoryDropDown.DataTextField = "CategoryName";
            categoryDropDown.DataValueField = "id";
            categoryDropDown.SelectedValue = category.id.ToString(); //this one doesnt cause the event to fire??? Doesnt matter if it is called after the databind() method
            categoryDropDown.DataBind();
        }

}

실행하려는 이벤트 핸들러 모든 그룹을로드하고 드롭 다운을 채우고 올바른 것을 선택해야합니다.

protected void categoryDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
        category = BLCategory.Load(Convert.ToInt32(categoryDropDown.SelectedValue), new TestModelDataContext());
        if (category != null)
        {
            List<BLGroup> groups = BLGroup.LoadAll(category.id);
            groupDropDown.DataSource = groups;
            groupDropDown.DataTextField = "GroupHeading";
            groupDropDown.DataValueField = "GroupId";
            groupDropDown.DataBind();
            if (group != null)
            {
                groupDropDown.SelectedValue = group.GroupId.ToString();
            }
            else
            {
                groupDropDown.SelectedIndex = 0;
            }
        }
    }

나는 무엇이 잘못되고 있는지 모르겠다. 이것은 간단한 일처럼 보인다. 내가 뭘 잘못하고 있는가?

도움이 되었습니까?

해결책

이 이벤트가 발사 되려면 사용자의 선택이 변경되면 페이지가 게시해야합니다. 이렇게하면 전체 페이지가 새로 고침되지만 제어는 상태를 유지해야합니다).

이 선택된 indexChanged 이벤트가 서버에서 실행 중이며 선택한 항목이 변경 될 때 제출/포스트 백에 대한 첫 번째 드롭 다운에 속성이 있다고 생각합니다.

클라이언트 측면 행동을 얻으려면 두 가지 작업을 수행 할 수 있습니다.
1) 해당 섹션을 업데이트 패널로 랩하고 첫 번째 값이 변경 될 때 두 번째 목록을 새로 고치십시오.
2) 선택한 값이 첫 번째 값이 변경 될 때 발생하는 JavaScript 클라이언트 측 코드를 사용하여 값을로드하고 목록을 검색하고 두 번째 값을 채 웁니다.
2A) 호출을 데이터 소스로 랩핑하고 값을 JSON 등으로 반환하는 서비스를 작성하거나 2B) 가능한 모든 선택의 모든 값을 어떤 방식 으로든 ID '의 숨겨진 필드로 채울 수 있습니다. 첫 번째 상자의 값에 의해 (이것은 바람직하지 않지만 데이터 세트의 보안 및 크기에 따라 가능합니다).

옵션 1은 아마도 기존 코드베이스를 유지하고 여전히 클라이언트 측 동작을 얻는 가장 간단한 방법 일 것입니다.

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