C# 클라이언트 버튼을 여러 번 클릭하면 서버가 여러 번 작업을 수행하는 문제를 해결합니다(즉, 빈번한 작업 문제).
페이지 제출 단추를 통해 데이터베이스에 기록을 추가합니다.인터넷 속도가 느리거나 브라우저가 끊겨서 버튼을 여러 번 눌렀다.데이터베이스에 여러 개의 기록이 기록되었다.군더더기를 이루다.혼란을 야기하다.이때 버튼을 눌렀을 때 짧은 시간에 페이지에서 제출 버튼을 몇 번 눌렀든지 간에모두 서버 처리를 한 번만 합니다.
해결:
사상은 클라이언트가'표지'를 정의하는데 클라이언트가 한 번 조작하면 표지를 바꾸는 것이다.이것은 다시 조작하면 표지가 바뀌었기 때문에 더 이상 조작을 하지 않을 것입니다.
서버가 다시 클라이언트의 요청을 받은 후에 작업을 실행하고 완성된 후에 클라이언트 표지를 재설정합니다.
페이지 코드는 다음과 같습니다.
여기에는 ASP가 사용됩니다.Button의 onClientClick 및 onclick.여기서 클릭은 서버 이벤트를 터치하고,clientclick은 클라이언트 페이지 이벤트를 터치합니다.여기서 먼저 OnClientClick 클라이언트 방법을 실행하고 Onclick 서버 방법을 실행합니다.OnClientClick이 되돌아오는 값이 없으면 클라이언트 OnClientClick 방법을 실행하면 반드시 서버의 onclick 방법을 실행합니다.클라이언트 방법에서 검증을 하고 서버 onclick 방법을 실행할지 여부를 결정하려면 반환값을false로 설정하면 클라이언트 OnClientClick 방법을 실행한 후 서버 onclick 방법을 실행하지 않습니다.쓰기 방법은 다음과 같은 코드에 쓸 수도 있고 컨트롤 속성에 직접 쓸 수도 있다.예: OnClientClick="aa(xx);return false"
컨트롤 input의value 값은 설정된'표지'입니다.
function BtSubmit() {
var button = document.getElementById('responseVal');
if (button.value == 'none') {
button.value = 'sign';
return true;
}
else
{
return false;
}
}
如果不使用clientclick,目前就只能使用一个原生的按钮触发页面JS,再在页面JS中触发ASP.Button的click了。麻烦一点。
后台代码如下,后台代码就正常编写即可。
protected void BtSubmit_Click(object sender, System.EventArgs e)
{
// ……
this.responseVal.Value = "none";
}
ps: 이 문제는 바로'빈번한 조작'문제입니다.병발 문제와 다르다.명사가 일치하지 않아서 나는 문제를 찾을 때 많은 시행착오를 겪었다.
신기한 질문 하나 더 드릴게요.
페이지 인쇄 함수 console.log ("진입:"+ button.value) 오류가 발생하여 제 기능이 무효화되어 빈번한 작업을 막을 수 없습니다.나는 ie11 브라우저를 사용한다.여전히 "console"정의되지 않은 오류가 있습니다.그리고 F12 디버깅 모드를 켜면 사라집니다.인터넷에는 이 문제에 대한 해석과 해결 방법이 매우 많다.여기는 묘사하지 않겠습니다.
다른 C#을 추가합니다.NET에서 빈번한 작업을 방지하는 방법
있다cs 파일에 등록합니다.코드는 다음과 같습니다.
ButtonSubmit.Attributes.Add("onclick", "this.value=' , ……';this.disabled=true;" + this.GetPostBackEventReference(ButtonSubmit));
하지만 사용법은this.GetPostBackEventReference(ButtonSubmit), 즉 Page.GetPostBackEventReference(ButtonSubmit).이 메서드가 만료되었고 사용되지 않음을 알립니다.
아직은 사용할 수 있지만 공식 문서를 살펴보고 대체 방법을 찾았다.코드는 다음과 같습니다.
ButtonSave.Attributes.Add("onclick", "this.value=' , ……';this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(ButtonSave, ""));
이 방법은 일반적으로 asp:button의 UseSubmitBehavior="false"속성과 함께 사용해야 한다.공식 설명에서 이 속성은 기본적으로true로 클라이언트 브라우저 제출 메커니즘을 사용합니다.false로 설정하면 ASP.NET 페이지 프레임워크는 클라이언트 스크립트를 페이지에 추가합니다.원본 코드의 차이점은 false로 설정할 때 onclick에 "__doPostBack('ButtonSubmit',')"이 추가되었다는 것입니다.구체적으로 어떤 차이가 있는지 잠시 이해하지 못했다.그러나 어떤 설정을 하든지 빈번한 제출을 피할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.