2010-04-09 3 views
0

ASP.NET 2005에서 JScript를 사용하고 있습니다. 확인란과 드롭 다운 목록이있는 페이지가 있습니다. 확인란을 선택하면 드롭 다운이 비활성화됩니다. 페이지를 다시 게시하는 동안이 동작을 유지해야합니다. 다음과 같이 자바 스크립트 함수를 사용하고 있습니다.ASP.NET에서 드롭 다운을 사용하지 않도록 설정하는 자바 스크립트

if((chkOwner[1].checked==true)) 
{ 

    document.getElementById(ddlClientID).disabled=true; 

    document.getElementById(ddlClientID).className = "form-disabled"; 

    document.getElementById(ddlClientID).selectedIndex = 0; 
} 

    else 
{ 

     document.getElementById(ddlClientID).disabled=false; 

     document.getElementById(ddlClientID).className = "form-input"; 

     document.getElementById(ddlClientID).selectedIndex = 0; 
} 

거의 작동합니다. 그러나 포스트 백 (확인란을 선택하지 않은 경우) 후에는 드롭 다운 선택이 유지되지 않습니다. [제로 인덱스의 값으로]

어쨌든 해결책은 마지막 줄을 제거하는 것입니다. 즉, else 부분에서 selectedIndex = 0을 제거하는 것입니다.

하지만 내가 그렇게하면 드롭 다운 (체크 박스가 선택된 경우)이 비활성화되면 포스트 백 후에 작동하지 않습니다.

도와 주시겠습니까?

추가 정보 : 각 페이지로드시이를 확인하기 위해 ClientScript.RegisterStartupScript를 사용하고 있습니다.

감사

Lijo

--CODE ----- 다음은 내가 노력하고 있습니다 것입니다. (이것은 내가 지금 만든 샘플 응용 프로그램입니다. 그것은이는 내가 달성하기 위해 노력하고 무엇을 표시 할 수 있습니다. 작동하지 않습니다.)

function ManageInputsFor() 
{ 
     if((document.getElementById(chbx).checked==true)) 
     { 
      document.getElementById(ddlClientID).disabled=true; 
      document.getElementById(ddlClientID).className = "form-disabled"; 
      document.getElementById(ddlClientID).selectedIndex = 0; 
     } 
     else 
     { 
      document.getElementById(ddlClientID).disabled=false; 
      document.getElementById(ddlClientID).className = "form-input"; 
      document.getElementById(ddlClientID).selectedIndex = 0; 
     } 
} 

protected void Page_Load(object sender, EventArgs e) 
    { 
     ClientScript.RegisterClientScriptBlock(Page.GetType(), "chbx", @"<script language=""javascript"" type=""text/javascript"">var chbx ='" + CheckBox1.ClientID + "'</script>"); 
     ClientScript.RegisterClientScriptBlock(Page.GetType(), "ddl", @"<script language=""javascript"" type=""text/javascript"">var ddlClientID ='" + DropDownList1.ClientID + "'</script>"); 
     ClientScript.RegisterStartupScript(Page.GetType(), "onLoadCallForManageInputs", @"<script language=""javascript"" type=""text/javascript"">ManageInputsFor();</script>"); 

     CheckBox1.Attributes.Add("onclick", "ManageInputsFor();"); 

    } 
+0

Mhhh, 나는 거의 가지고 있지만 .. "현명한 해결책은 마지막 줄을 제거하는 것입니다. 즉, else 부분에서 selectedIndex = 0을 제거하는 것입니다." 그건 사실이 아니야. 이 JS 함수를 사용하는 곳에 코드를 붙여 넣을 수 있습니까? –

+0

안녕하세요 클라우디오, 위의 업데이트 된 질문을 참조하십시오. – Lijo

답변

0

당신은 동안 체크 박스의 서버 측 평가해야 할 것이다 드롭 다운 목록을 사용하도록 설정했는지 여부를 설정합니다. 포스트 작업 동안 드롭 다운의 disabled 속성은 서버에 보내지지 않습니다 (둘 다 비활성화되었을 때 컨트롤의 값도 아닙니다).

편집 : 포스트 백에서 드롭 다운 값을 유지하려면 선택한 값을 게시 할 다른 컨트롤에 복사 한 다음 서버 처리 중에 값을 다시 드롭 다운에 할당 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 하지만 그것은 내 요구 사항을 충족시키지 못합니다. 클라이언트 측에서 드롭 다운을 비활성화해야합니다. 첫 번째 다시 게시하기 전에도 사용할 수 없도록 설정해야합니다. – Lijo

0

기본적으로 자바 스크립트를 사용하여 ASP 컨트롤의 상태를 변경하면 해당 문제는 서버에 다시 게시되지 않습니다. 당신은 그것을 보낼 수있는 방법을 찾아야합니다. 숨겨진 컨트롤을 사용하거나 쿼리 문자열에 매개 변수를 추가하는 두 가지 방법이 있습니다.

+0

배경에 대해 더 자세히 설명하겠습니다. 페이지로드 전에 javascript 함수를 호출합니다. 따라서 저는 서버에 가치를 전달할 필요가 없다고 생각합니다. [나는 이것에 대한 원래의 게시물을 편집 할 것이다] – Lijo

관련 문제