나는 draggable을 div
활용하는 여러 개의 작은 s가 있습니다 jQuery
. 이들은 div
에 배치되고 UpdatePanel
dragstop에서 _doPostBack()
JavaScript 함수를 사용 하여 페이지 양식에서 필요한 정보를 추출합니다.
내 문제는이 함수를 호출하면 전체 페이지가 다시로드되지만 업데이트 패널 만 다시로드되기를 원한다는 것입니다.
답변:
다음은 완벽한 솔루션입니다.
<form id="form1" runat="server">
<asp:LinkButton ID="LinkButton1" runat="server" /> <%-- included to force __doPostBack javascript function to be rendered --%>
<input type="button" id="Button45" name="Button45" onclick="javascript:__doPostBack('ButtonA','')" value="clicking this will run ButtonA.Click Event Handler" /><br /><br />
<input type="button" id="Button46" name="Button46" onclick="javascript:__doPostBack('ButtonB','')" value="clicking this will run ButtonB.Click Event Handler" /><br /><br />
<asp:Button runat="server" ID="ButtonA" ClientIDMode="Static" Text="ButtonA" /><br /><br />
<asp:Button runat="server" ID="ButtonB" ClientIDMode="Static" Text="ButtonB" />
</form>
Private Sub ButtonA_Click(sender As Object, e As System.EventArgs) Handles ButtonA.Click
Response.Write("You ran the ButtonA click event")
End Sub
Private Sub ButtonB_Click(sender As Object, e As System.EventArgs) Handles ButtonB.Click
Response.Write("You ran the ButtonB click event")
End Sub
두 개의 입력 컨트롤이 클라이언트에 렌더링됩니다.
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
__EVENTTARGET
__doPostBack의 인수 1을받습니다.__EVENTARGUMENT
__doPostBack의 인수 2를받습니다.__doPostBack 함수는 다음과 같이 렌더링됩니다.
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
양식 제출 / 포스트 백 발생시 :
javascript:__doPostBack('ButtonB','')
버튼 클릭 처리기 를 실행할 서버 제어 버튼의 UniqueID ()를 제공하면 해당 버튼에 대한 버튼 클릭 처리기가 실행됩니다.원하는 것은 무엇이든 인수로 전달할 수 있습니다. __doPostBack
그런 다음 숨겨진 입력 값을 분석하고 그에 따라 특정 코드를 실행할 수 있습니다.
If Request.Form("__EVENTTARGET") = "DoSomethingElse" Then
Response.Write("Do Something else")
End If
ClientIDMode="Static"
수없는 경우 다음과 같이 할 수 있습니다 __doPostBack('<%= myclientid.UniqueID %>', '')
..__doPostBack('<%= MYBUTTON.UniqueID %>','')
Phairoh의 해결책은 이론적으로 타당 해 보이지만이 문제에 대한 또 다른 해결책을 찾았습니다. doPostBack 함수에 대한 매개 변수 (이벤트 대상)로 UpdatePanels ID를 전달하면 업데이트 패널이 다시 게시되지만 전체 페이지는 표시되지 않습니다.
__doPostBack('myUpdatePanelId','')
* 참고 : 두 번째 매개 변수는 이벤트 인수 추가 용입니다.
이것이 누군가를 돕기를 바랍니다!
편집 : 그래서 내가 입력 할 때 위와 같은 조언이 주어진 것 같습니다 :)
__doPostBack
직접 사용 하는 것은 2000 년대 sooooo입니다. 2018 년에 WebForms를 코딩하는 사람은 누구나 GetPostBackEventReference를 사용합니다.
(더 심각하게는 이것을 완전성에 대한 답으로 추가하는 것입니다. __doPostBack
직접 사용하는 것은 좋지 않습니다 (단일 밑줄 접두사는 일반적으로 개인 구성원을 나타내고 이중은보다 보편적 인 개인 구성원을 나타냄). 우리는 ClientScriptManager.GetPostBackEventReference 에서 완전히 지원되는 메커니즘을 가지고 있습니다 .)
btnRefresh가 UpdatePanel 내부에 있고 포스트 백이 발생한다고 가정하면 다음과 같이 GetPostBackEventReference를 사용할 수 있습니다 ( inspiration ).
function RefreshGrid() {
<%= ClientScript.GetPostBackEventReference(btnRefresh, String.Empty) %>;
}
누구든지 이것에 문제가있는 경우 (나처럼) 버튼에 UseSubmitBehavior = "false"속성을 추가하여 버튼에 대한 포스트 백 코드를 얻을 수 있습니다. 버튼의 렌더링 된 소스를 살펴보면 실행해야하는 정확한 자바 스크립트가 표시됩니다. 제 경우에는 ID가 아닌 버튼 이름을 사용했습니다.
첫째, 업데이트 패널을 사용하지 마십시오. 이것은 마이크로 소프트가 웹 개발자를 위해 만든 두 번째로 악한 것입니다.
둘째, 업데이트 패널 을 사용해야 하는 경우 UpdateMode 속성을 Conditional로 설정해보십시오. 그런 다음 페이지에 추가하는 Asp : Hidden 컨트롤에 트리거를 추가합니다. 변경 이벤트를 트리거로 지정하십시오. dragstop 이벤트에서 숨겨진 컨트롤의 값을 변경합니다.
이것은 테스트되지 않았지만 이론은 소리가 나는 것 같습니다 ... 이것이 작동하지 않으면 asp : button으로 동일한 것을 시도하고 display : none 스타일을 설정하고 변경 이벤트 대신 클릭 이벤트를 사용하십시오.
_doPostBack()
양식 제출을 강제하기 때문에 전화를 걸 수 없습니다 . 왜 당신은 해제하지 않는 PostBack
온 UpdatePanel
?