클라이언트 확인 후 DropdownList 자동 복원
-
09-06-2019 - |
문제
자동 포스트백이 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')");
<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;} " >
<asp:ListItem Text="tes" Value="1" ></asp:ListItem>
<asp:ListItem Text="test" Value="-1"></asp:ListItem>
</asp:DropDownList>
함수를 인라인으로 작성하고 포스트백을 원하는 조건에 대한 "반환"이 없습니다.이것은 작동하며 표준에 따릅니다.