asp.net에서 다시 발생합니다. 데이터가 다시 전송됩니까? 페이지로드시 페이지 새로 고침 이벤트를 트랩하는 C#의 방법이 있습니까 ??새로 고침 페이지가 양식을 제출하고 새로 고침 할 때
답변
ASP.NET에서는 직접 수행 할 방법이 없습니다. 제출 후
리디렉션 :
중복 제출을 방지하기 위해, 다른 한편으로는, 몇 가지 기술이있다. 이것은 최악의 경우입니다. 중복 제출을 피할지라도 사용자 관점에서 볼 때 현대 웹 응용 프로그램에서는 허용되지 않습니다.
세션 당 트랙 제출. 사용자가 처음으로 양식을 제출하면 세션에서이를 기억하십시오. 다른 제출이 발생하면 폐기해야하는지 여부를 결정하십시오 (예 : StackOverflow에서 내 대답을 한 번 편집하면 필요한 경우 두 번 수행 할 수 있음).
첫 제출 후 JavaScript로 제출을 비활성화하십시오. 이렇게하면 사용자가 제출 단추를 두 번 클릭하거나 처음 클릭 할 때 양식이 제출되지 않았다고 생각하여 두 번째로 클릭하는 상황을 피할 수 있습니다. 물론이 작업에 의존하지 마십시오. JavaScript가 비활성화되어있을 수도 있고, 두 번 클릭해도 작동하지만 F5 새로 고침이되지 않을 수도 있으며 모든 경우에 완전히 신뢰할 수있는 방법은 아닙니다.
예를 들어 두 번째 구현을 시도해 봅시다.
사용자가 블로그 페이지에 새로운 댓글을 추가 할 수있는 설명 상자 this.textBoxComment
이 있다고 가정 해 보겠습니다. 제출은 다음과 같이 이루어집니다.
private void Page_Load(object sender, System.EventArgs e)
{
if (this.IsPostBack)
{
string comment = this.ValidateCommentInput(this.textBoxComment.Text);
if (comment != null)
{
this.databaseContext.AddComment(comment);
}
}
}
사용자가 두 번 클릭하면 댓글이 두 번 게시됩니다.
이제, 일부 세션 추적을 추가 할 수 있습니다 :이 경우
private void Page_Load(object sender, System.EventArgs e)
{
if (this.IsPostBack)
{
if (this.Session["commentAdded"] == null)
{
string comment = this.ValidateCommentInput(this.textBoxComment.Text);
if (comment != null)
{
this.databaseContext.AddComment(comment);
this.Session.Add("commentAdded", true);
}
}
else
{
// TODO: Inform the user that the comment cannot be submitted
// several times.
}
}
}
, 사용자는 한 번만 의견을 제출할 수 있습니다. 다른 모든 설명은 자동으로 삭제됩니다.
문제는 사용자가 여러 블로그 게시물에 의견을 추가하려고 할 수 있다는 것입니다. 이를 가능하게하는 두 가지 방법이 있습니다. 쉬운 방법은 모든 비 포스트 백 요청에서 세션 변수를 재설정하는 것이지만 사용자가 한 페이지에서 게시물을 제출하고 다른 페이지를로드 할 수 있습니다. 더 이상 두 번째 페이지에 주석을 추가 할 수 있습니다.
private void Page_Load(object sender, System.EventArgs e)
{
if (this.IsPostBack)
{
if (this.Session["commentAdded"] == null)
{
string comment = this.ValidateCommentInput(this.textBoxComment.Text);
if (comment != null)
{
this.databaseContext.AddComment(comment);
this.Session.Add("commentAdded", true);
}
}
else
{
// TODO: Inform the user that the comment cannot be submitted
// several times.
}
}
else
{
this.Session.Remove("commentAdded");
}
}
더 고급 페이지는 댓글이 제출 된 페이지 목록을 추적하는 것입니다. 당신은 할 수
private void Page_Load(object sender, System.EventArgs e)
{
List<string> commentsTrack = this.Session["commentAdded"] as List<string>;
string blogPostId = this.ValidatePostId(this.Request.QueryString["id"]);
if (blogPostId != null)
{
if (this.IsPostBack)
{
this.AddComment(commentsTrack);
}
else
{
if (commentsTrack != null && commentsTrack.Contains(blogPostId))
{
commentsTrack.Remove(blogPostId);
}
}
}
}
private void AddComment(List<string> commentsTrack)
{
if (commentsTrack == null || !commentsTrack.Contains(blogPostId))
{
string comment = this.ValidateCommentInput(this.textBoxComment.Text);
if (comment != null)
{
this.databaseContext.AddComment(comment);
if (commentsTrack == null)
{
commentsTrack = new List<string>();
}
commentsTrack.Add(blogPostId);
this.Session["commentAdded"] = commentsTrack;
}
}
else
{
// TODO: Inform the user that the comment cannot be submitted
// several times.
}
}
브라우저에서 페이지를 새로 고치기 때문에 문제가되지 않는다고 생각합니다. –
@Muhammad Akhtar : 예, 고마워요. 나는이 질문에 대해 완전히 오해했습니다. 이제 답이 편집됩니다. –
그냥 생각. 같은 페이지로 리디렉션하면 어떨까요? 허용 된 접근 방식인가? – Malik
, 그것은 당신의 마음에 어떤 지점이있는 경우, 다음과 같은 코드를 추가하여이 작업을 수행 할 텍스트 상자 등의 모든 텍스트를 제거 페이지를 다시로드, 자동으로 양식을 제출 한 후 페이지 자체를 새로 만들기 ->Page.Redirect(Request.RawUrl);
을 제출 메소드 하단에 추가하십시오.
예 : '버튼'을 클릭하면 시스템에서 'button_click'이벤트를 catch합니다. 페이지를 새로 고치면 시스템에서 동일한 이벤트를 다시 실행합니다. 이벤트 삽입에, t이 문제를 돈합니다 : 를 이벤트에
private void button_click(object sender, System.EventArgs e)
{
button.Enabled =false;
button.Enabled =true;
}
당신이 무슨 의미입니까?
이 답변의 다른 사본과 마찬가지로, 이것은 질문과 관련이 없습니다. –
동일한 문제가 발생하여 세션 추적으로 해결했습니다. 그리고 난 쉬운과 이 문제를 해결하는 방법 시간이 덜 것 같아요.
- 1. 새로 고침/새로 고침
- 2. 새로 고침/새로 고침 Google지도
- 3. NSFetchedResultsController 새로 고침 새로 고침?
- 4. 인터넷에서 동기화 후보기 새로 고침/새로 고침
- 5. flex에서 데이터 격자 새로 고침/새로 고침
- 6. ListView WPF에서 새로 고침 제안 새로 고침
- 7. Infragistics WebDataGrid 새로 고침 새로 고침
- 8. 새로 고침/새로 고침 Flot In Javascript
- 9. Java JTable 재구성/새로 고침/새로 고침
- 10. 새로 고침
- 11. Authorize.net보고 새로 고침 빈도는?
- 12. UIView에서 개체/데이터 새로 고치기위한 새로 고침/새로 고침 단추
- 13. 페이지 새로 고침 문제
- 14. WinForm 새로 고침 문제
- 15. ICEFaces 페이지 새로 고침
- 16. asp.net에서 새로 고침 페이지
- 17. cakephp에서 새로 고침 양식
- 18. 새로 고침 winform
- 19. 새로 고침 코드
- 20. 매분 새로 고침 file.js
- 21. Ajax없이 JSF 새로 고침
- 22. jCaptcha - 전체 페이지가 아닌 이미지 새로 고침
- 23. 페이지 새로 고침 문제
- 24. 끊임없이 새로 고침 페이지
- 25. 페이지 자동 새로 고침
- 26. MVC에서 페이지 새로 고침
- 27. 새로 고침 문제
- 28. 페이지를 새로 고침 할 때 시간 표시
- 29. 커서 위치를 새로 고침 할 때
- 30. 액세스 할 때 연결된 테이블 새로 고침
브라우저에서 F5 키를 눌러 페이지를 새로 고치고 있습니까? –
예, 그럴 경우 이전에 해고 된 이벤트가 다시 발생합니다. – Paras