문제

자동 포스트백이 true로 설정된 드롭다운 목록이 있습니다.사용자가 실제로 값을 변경하고 싶은지 확인하기를 원합니다.이 값은 서버 측면 이벤트 (selectedIndexChanged)를 발사합니다.

onchange 속성 "return verify('변경하려면 확인을 클릭하세요.그렇지 않으면 취소를 클릭하십시오? '; ") 그러나 확인 결과에 관계없이 포스트백은 아니며 취소가 선택된 경우 목록의 값이 되돌아 가지 않습니다.

DropdownList 태그에서 onchange 속성을 제거하면 페이지가 포스트백을 수행합니다.onchange 속성이 추가되면 그렇지 않습니다.여전히 이벤트 핸들러를 연결해야 합니까(저는 C# .Net 2.0을 사용하고 있습니다).

모든 단서가 도움이 될 것입니다.

감사해요!

도움이 되었습니까?

해결책

onChange 이벤트를 자바스크립트 함수로 설정한 다음 함수 내부에서 자바스크립트 경고를 표시하고 통과하면 __doPostback 함수를 활용해 보셨나요?

즉.

   
drpControl.Attributes("onChange") = "DisplayConfirmation();"

function DisplayConfirmation() {
  if (confirm('Are you sure you want to do this?')) {
    __doPostback('drpControl','');
  }
}

다른 팁

확인()을 수행하는 자바스크립트 함수를 호출하여 CustomValidator 컨트롤을 활용하여 드롭다운을 "검증"할 수 있습니다.

        <asp:DropDownList ID="TestDropDown" runat="server" AutoPostBack="true" CausesValidation="true"
            ValidationGroup="Group1"
            OnSelectedIndexChanged="TestDropDown_SelectedIndexChanged">
            <asp:ListItem Value="1" Text="One" />
            <asp:ListItem Value="2" Text="Two" />
        </asp:DropDownList>
       <script type="text/javascript">
            function ConfirmDropDownValueChange(source, arguments) {
                arguments.IsValid = confirm("Are you sure?");
            }
        </script>
        <asp:CustomValidator ID="ConfirmDropDownValidator" runat="server"
            ClientValidationFunction="ConfirmDropDownValueChange" Display="Dynamic" ValidationGroup="Group1"  />

DropDownList가 부분 포스트백을 트리거할 때 다음이 작동합니다.

// caching selected value at the time the control is clicked
MyDropDownList.Attributes.Add(
    "onclick",
    "this.currentvalue = this.value;");

// if the user chooses not to continue then restoring cached value and aborting by returning false
MyDropDownList.Attributes.Add(
    "onchange",
    "if (!confirm('Do you want to continue?')) {this.value = this.currentvalue; return false};");

현재는 항상 결과를 반환하고 있습니다. confirm(), 그래서 그것이 반환되더라도 true, 포스트백이 실행되기 전에 이벤트 실행을 중지합니다.당신의 onchange ~해야 한다 return false; 오직 때에만 confirm() 또한 다음과 같습니다.

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

AutoPostBack을 true로 설정한 경우 onchange 특성을 재정의하면 ASP.NET이 항상 onchange 스크립트 끝에 다음을 추가하므로 작동하지 않습니다.

;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)

AutoPostBack을 false로 설정한 경우 onchange를 "confirm 및 __doPostBack" 유형 스크립트로 재정의합니다(위 참조, 오류..아래) 작동하지만 __doPostBack 함수를 수동으로 생성해야 할 수도 있습니다.

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

항상 반환되므로 사용자가 확인 또는 취소를 클릭하면 dropdownlist의 OnSelectedIndexChanged 이벤트가 실행됩니다.

이벤트가 연결되었는지 확인하세요.

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

클라이언트 측 속성을 적용하여 확인을 반환할 수도 있습니다.취소된 경우 이에 따라 인덱스를 설정합니다.

dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
&lt;asp:DropDownList runat="server" ID="ddlShailendra"  AutoPostBack="True" OnSelectedIndexChanged="ddlShailendra_SelectedIndexChanged" onchange="javascript: { if(confirm('Click ok to prevent post back, Cancel to make a postback'))return true;} " &gt;
          &lt;asp:ListItem Text="tes" Value="1" >&lt;/asp:ListItem&gt;
            &lt;asp:ListItem Text="test" Value="-1"&gt;&lt;/asp:ListItem&gt;
            &lt;/asp:DropDownList&gt;

함수를 인라인으로 작성하고 포스트백을 원하는 조건에 대한 "반환"이 없습니다.이것은 작동하며 표준에 따릅니다.

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