2009-02-09 7 views
0

페이지를 시간 초과시키고 5 분 후에 리디렉션하도록하는 클라이언트 쪽 JavaScript가 포함 된 기본 asp.net 웹 양식이 있습니다. 주로 민감한 정보를 보호합니다.ASP.NET 클라이언트 쪽 포스트 백

시간 초과시 향후 편집을 위해 양식 값을 저장할 수 있도록 서버 포스트를 강제 적용하려고합니다.

ClientScript.GetPostBackClientHyperlink()와 ClientScript.GetPostBackEventReference()를 모두 사용했습니다. 둘 다 나를 위해 EventValidation 문제를 일으키는 것 같습니다. 예, 이벤트 유효성 검사를 해제 할 수 있지만 다른 또는 더 나은 작업 증명이 있습니까?

이상적으로, 나는 (표시되어야하는) 컨트롤을 호출하고 싶지 않고 서버 측을 타임 아웃 조건의 결과로 인식 할 수있는 몇 가지 유형의 인수가있는 포스트 백을 야기합니다.

답변

1

내 솔루션을 만들지 않기 때문에 훌륭한 솔루션이 아닙니다. 아주 간단한 사용자 정의 컨트롤. 의견 환영합니다.

using System; 
using System.ComponentModel; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace BinaryOcean.Web.Library.WebControls 
{ 
    [ToolboxData("<{0}:PostBackTimer runat=\"server\" />"), DefaultProperty("Seconds"), DefaultEvent("Timeout")] 
    public class PostBackTimer : Control, IPostBackEventHandler 
    { 
     public PostBackTimer() { } 

     public string CommandArgument 
     { 
      get { return (string)ViewState["CommandArgument"] ?? string.Empty; } 
      set { ViewState["CommandArgument"] = value; } 
     } 

     public string CommandName 
     { 
      get { return (string)ViewState["CommandName"] ?? string.Empty; } 
      set { ViewState["CommandName"] = value; } 
     } 

     public bool Enabled 
     { 
      get { return (bool)(ViewState["Enabled"] ?? true); } 
      set { ViewState["Enabled"] = value; } 
     } 

     public int Seconds 
     { 
      get { return (int)(ViewState["Seconds"] ?? 0); } 
      set { ViewState["Seconds"] = value; } 
     } 

     [Description("PostBackTimer_OnTimeout")] 
     public event EventHandler Timeout = delegate { }; 

     [Description("PostBackTimer_OnCommand")] 
     public event CommandEventHandler Command = delegate { }; 

     public void RaisePostBackEvent(string eventArgument) 
     { 
      Timeout(this, EventArgs.Empty); 
      Command(this, new CommandEventArgs(CommandName, CommandArgument)); 
     } 

     protected override void OnPreRender(EventArgs e) 
     { 
      if (Enabled && Seconds > 0) 
      { 
       var postback = Page.ClientScript.GetPostBackEventReference(this, null); 
       var script = string.Format("setTimeout(\"{0}\",{1});", postback, Seconds * 1000); 
       Page.ClientScript.RegisterStartupScript(GetType(), "PostBackTimer_" + UniqueID, script, true); 
      } 

      base.OnPreRender(e); 
     } 
    } 
} 
1

이것은 과도 할 수 있지만 웹 서비스 호출을 시작하는 자바 스크립트 타이머를 설정할 수 있습니다. .NET 웹 서비스는 양식 데이터를 수락하고 저장할 수 있습니다.

0

제출 버튼을 "클릭"하기 위해 자바 스크립트 타이머를 사용할 수 없습니까? 이 양식을 사용하는 것이 실제로 짜증나는 것처럼 들리지만, 작성하는 동안 게시가 계속되면 계속됩니다.

0

(자바 스크립트 포함) __doPostBack("clientIdOfSubmitButton", null)으로 전화하십시오. 이것은 마치 해당 버튼 (또는 원하는 다른 컨트롤)이 트리거 한 것처럼 포스트 백을 시작합니다.

관련 문제