2011-03-02 4 views
0

jquery ajax를 통해 채워진 계단식 드롭 다운이 있습니다. 샘플 코드를 얻을 수있는 링크를 따라 예외로 결과 Download Sample CodeCascadingDropDown 오류 - DropDownList에 selectedValue가 잘못되었습니다.

단계 :

1 : ModelYear에 대한 선택을 확인, 확인 및 모델은

2 : 드롭 다운을 재설정 "지우기 버튼"을 클릭 그 때 예외가 발생합니다.

이 오류를 제거하려면 어떻게해야합니까? 지우기를 클릭 할 때 숨겨진 필드를 설정하여 우회하는 이상한 방법이 있지만 포스트 백을 수행하는 많은 다른 컨트롤을 갖게 될 것이고 해결 방법이 서투르지 않고 실제 솔루션을 찾고 있습니다.

내가 잘못하고 있지만 어떨까요?

링크에 대한 액세스가 일부 변경되었습니다. 그게 효과가 있다면 알려주세요.

편집 : 샘플은 VS2005/.NET 2.0 및 WinXP를 사용하여 개발되었지만 서버는 Win2003입니다.

+0

샘플 코드를 다운로드 할 수 없습니다. 허가 문제? – Oleg

+0

죄송합니다. 방금 링크를 클릭하고 로그인하지 않고 다운로드 할 수있었습니다. skydrive를 처음 사용하므로 잘못되었을 수 있습니다. 나는 그것을 공공연히 확립했다. 계정에 로그인하면 Windows에 로그인하여 시도 할 수 있습니까? – gbs

+0

@gbs : 윈도우 라이브에 로그인해야하지만 로그인 후에 독일어로 "이 폴더는 공개되지 않을 수 있습니다 (공유 된)"라는 메시지가 나타납니다. 그들은 액세스 권한이없는 것 같습니다. 다른 계정을 사용해 보거나 액세스 권한이있는 폴더 소유자에게 요청해야합니다. " 다른 브라우저에서 가지고있는 것과 같은 문제입니다.귀하의 계정에서 액세스 할 수 있지만 다른 사람들이 파일에 액세스하도록 허용해야합니다. – Oleg

답변

0

나는 HiddenField의 해결 방법을 사용하여 포스트 백시 드롭 다운을 다시로드해야하는지 여부를 결정했습니다. 버튼을 클릭하면 숨겨진 필드 값을 설정합니다.

편집 : 나는 오류가 try 블록 내부에 내 드롭 데이터 바인딩을 넣고 빈 캐치를했다 회피하는 것으로 또 다른 방법.

try 
{ 
    ddl.DataSource = list; 
    ddl.DataTextField = "Text"; 
    ddl.DataValueField = "Value"; 
    ddl.DataBind(); 
} 
catch{} 

내 코드에 관한 한 부작용이 없습니다.

참고 : 오류를 삼킨 빈 캐치 블록을 항상 갖고있는 것은 좋지 않습니다.

0

코드를 검사 한 결과 빠르고 쉬운 수정은 요청이 지우기 버튼에서 오는 것인지 확인하는 것입니다. 기본적으로 Clear 버튼을 누르면 ReloadDropDownSelection()을 호출하지 않습니다.

public partial class CascadingUC : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      ModelYears.Attributes.Add("onchange", "OnModelYearChange()"); 
      Makes.Attributes.Add("onchange", "OnMakeChange()"); 
      Models.Attributes.Add("onchange", "OnModelChange()"); 
      LoadMakes(); 
      LoadModels(); 
     } 
     else 
     { 
      if ((Request.Form["btnClear"]==null)||(Request.Form["btnClear"] != "Clear")) 
       ReloadDropDownSelection(); 
     } 
    } 

내 의견에 말했듯이 여기서 문제는 viewstate입니다. 콤보 서버 측 (PopulateDropDownList)을로드 한 다음 클라이언트 측 항목을 변경합니다.

ASP.NET MVC가 나왔을 때 (asp.net, viewstate, 수천 개의 이벤트) 이러한 것들로 고생했습니다. ASP를 정말 싫어했습니다. NET 웹폼. 나는 그것이 거의 농담이라고 생각한다.

+0

코드를 살펴 주셔서 고맙습니다.하지만 제 질문에서 언급 한 것처럼 - "지우기 클릭시 숨겨진 필드를 설정하여 우회하는 이상한 방법이 있습니다." 그것은 당신과 유사하지만 제 해결 방법은 일반적인 것입니다. 가장 큰 문제는 내 페이지가 매우 복잡하고 드롭 다운 UC에 영향을주는 여러 가지 다른 포스트 백 컨트롤이 있다는 것입니다. 지금 각 컨트롤에 대해 ReloadDropDownSelection을 호출해야하는지 결정합니다. 잘 작동합니다. 또한 .ascx 컨트롤은 다른 페이지에서도 사용되기 때문에 두통이 될 것입니다. – gbs

+0

네,하지만, 당신 인생은 복잡해지기를 원합니다. 하루가 끝나면 여러 개의 드롭 박스가 계단식으로로드되며 값을 읽고 결국에는이를 지워야합니다. 매우 간단하고 명확한 과정. 당신은 코드가 매우 복잡합니다. 나는 과거에 그렇게 했었고 이벤트 호출 등을 이해하는 데 2 ​​일을 소비하는 데 사용되었습니다. 재미있는 점은 웹은 stateless입니다 : 데이터를 읽고 데이터를 게시합니다. – LeftyX

관련 문제