markom
그는 물었다 12년 전
5

처리되지 않은 예외 (ASP.NET) 에서 우저콘트레라스 끌었다.

39 m, i& 동적으로 웹 사용자 추가하기 제어하는지 로드중 통제서 취합은 양식.

39 i& 발생할 경우, d 등 사용자 제어 숨기십시오 처리되지 않은 idfsysobject. 렌더하는 동안.

그래서 시도한 적이 있으나 이 경우 각 우저콘트럴 후킹 오류 않으므로 화재와 우저콘트레라스 이벤트 페이지 클래스를 위한 것으로 보인다.

일부 인터넷 검색, 유망 it 관련 doesn& t # 39 한 것 같다. 아무 생각 없어 여기서요?

답변 7 개

이어 미리스) 에서 [응답이] (https://stackoverflow.com/questions/10793/catching-unhandled-exceptions-in-aspnet-usercontrols # 10910) 내 [이전 아이디어] (https://stackoverflow.com/questions/10793/catching-unhandled-exceptions-in-aspnet-usercontrols # 10815).

더 이상 필요한 논리를! # 39 의 that& 요점이지 너회의 아무런 조치도 취하지 않고, 그냥 그 질문에 대한 클래스 인스턴스 랩할 일부 버블 랩! )

네, 그냥 갈 거라고 하지만 이 작품을 보고 싶다고 글머리표 점, 그래서 내가 나를 위해 벨기에 황삭 코드를 개념이 아니라 일부 very 함께 작업할 수 있어 보인다.

  • 사과를 장기간 게시물로의 *

이 사프로이더

이렇게 하면 기본적으로 포지셔닝합니다 bubble&quot "; 내가 언급되지 않았다. Html 을 렌더링하는 동안 발생하는 재활용됩니다 제어하는지 인기를 얻을 것으로 보인다.

public class SafeLoader
{
    public static string LoadControl(Control ctl)
    {
        // In terms of what we could do here, its down
        // to you, I will just return some basic HTML saying
        // I screwed up.
        try
        {
            // Get the Controls HTML (which may throw)
            // And store it in our own writer away from the
            // actual Live page.
            StringWriter writer = new StringWriter();
            HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
            ctl.RenderControl(htmlWriter);

            return writer.GetStringBuilder().ToString();
        }
        catch (Exception)
        {
            string ctlType = ctl.GetType().Name;
            return "<span style=\"color: red; font-weight:bold; font-size: smaller;\">" + 
                "Rob + Controls = FAIL (" + 
                ctlType + " rendering failed) Sad face :(</span>";
        }
    }
}

및 일부 통제서.

그냥 통제서 임무야, one 은 2 조 롱하였기 양호임 함께 같이 다른 렌더링됩니다 들어봤다. 여기서, 제가 don& # 39 점, t give a 큰일이다. 이러한 사용자 지정 컨트롤을 대체할 수 있습니다.

바드콘트럴

public class BadControl : WebControl
{
    protected override void Render(HtmlTextWriter writer)
    {
        throw new ApplicationException("Rob can't program controls");
    }
}
public class GoodControl : WebControl
{
    protected override void Render(HtmlTextWriter writer)
    {
        writer.Write("<b>Holy crap this control works</b>");
    }
}

페이지

좋아, 그럼, 이 &quot test&quot 살펴보겠습니다. 호출이네요 나는 여기서 인스턴스화하지 단순히 html 및 제어, grab it, I will follow with 출력입니다 그들의 생각을 디자이너 지원부에서는 상술합니다.

페이지 뒤에 코드

    protected void Page_Load(object sender, EventArgs e)
    {
        // Create some controls (BadControl will throw)
        string goodHtml = SafeLoader.LoadControl(new BadControl());
        Response.Write(goodHtml);

        string badHtml = SafeLoader.LoadControl(new GoodControl());
        Response.Write(badHtml);
    }

생각을

OK, I know what you are thinking, &quot 인스턴스화되지 프로그래밍 방식으로, 뭐 어때, 이 컨트롤은 디자이너 지원? 이러한 컨트롤을 가져오는 데 대해 이제 잘 시간 나는 거죠, re 메싱, 디자이너, 내 손으로 mojo&quot you& # 39.

좋아, 그럼 난 아직 이 아벤트 상행담관염이라고 테스트되었습니다 (아마 할 수 있는 분!) 하지만 이 아이디어는 슬라이드에서는 크리스 차일드콘트레라스 무시하려면 페이지, 시행하십시오 인스턴스에서는 양식의 방법을 통해 해당 사프로이더 실행하십시오 각 제어입니다 덧붙였다. 코드를 통과할 경우, 그렇지 않을 경우 정상적으로 취합은 컨트롤을 추가할 수 있습니다 잘못된 리터럴 또는 최대 나랑 친해 뭔가를 만들 수 있습니다.

마지막으로.

다시 한 번 죄송합니다 장기간 게시물로의 있지만, 여기서 이 문제를 논의할 수 있도록 코드를 내려받습니다 싶다:) 이를 통해 내 생각이야 제시하십시오 좋겠다:)

업데이트

테스트를 거친 척 제어점 있는 디자이너 및 우선 순위화할 크리스 차일드콘트레라스 메서드입니다 대체하십시오, 작동합니다, 필요할 수도 클린업합니다 만들 수 있는 것을 보고 있지만, ll 남겨두십시오 # 39 더 I& 너회들;)

protected override void CreateChildControls()
{
    // Pass each control through the Loader to check
    // its not lame
    foreach (Control ctl in Controls)
    {
        string s = SafeLoader.LoadControl(ctl);
        // If its bad, smack it downnnn!
        if (s == string.Empty)
        {
            ctl.Visible = false; // Prevent Rendering
            string ctlType = ctl.GetType().Name;
            Response.Write("<b>Problem Occurred Rendering " + 
                ctlType + " '" + ctl.ID + "'.</b>");
        }
    }
}

즐거운 시간 되세요!

이는 흥미로운 문제입니다. 난 아직 꽤 신선한 등의 측면에서 볼 때, 여기 내 생각을 하지만, 사용자 지정 컨트롤 (feel free to 주석문입니다 / 올바른 백성중에서!). (나는 여기 좀 사고 / 먹어서나 소리내어!)

  • 렌더링합니다 중에 오류가 발생할 경우, 경우에 따라 늦었음요 안 되겠습니까? (이후 일부 통제서 HTML 이미 작성기와 출력입니다 보낼 수 있다). 이에 따라 잡기 위해 최선을 다 할 수 없는 것은 * 사용자 control& # 39 에 대한 참조를 전달하기 보다는 렌더링합니다 방법을 &quot Live"; 거의 모든 예외를 트랩할 비헤이비어를 직접 타마라테스트라이터 전달했는지, 안전, bubble&quot 뚜르산을 &quot 잘 진행된다면, 그런 다음, 이 결과, 해당 HTML 전달하십시오 실제 타마라테스트라이터?
  • 이 논리를 동적으로 로드할 수 있는 아마도 던져진 맞추기바인딩 일반 래퍼 / 렌더링합니다 통제서 런타임에 클래스를 사용합니다.
  • 재활용됩니다 책임질래 발생할 경우, 필요한 모든 정보를 여기있네! (이리에 제어입니다 참조입니다 등).

그냥 내 생각, 불꽃 빼냅니다! D;)

해당 오류는 위치에 따라 같은 일이 발생 할 수 있습니다.

public abstract class SilentErrorControl : UserControl
{
    protected override void Render( HtmlTextWriter writer )
    {
        //call the base's render method, but with a try catch
        try { base.Render( writer ); }
        catch ( Exception ex ) { /*do nothing*/ }
    }
}

그 대신 상속됩니다 실엔터로콘트럴 우저콘트럴.

내가 예전에는 @Keith& # 39 의 외곽진입, 문제는 렌더링됩니다 idfsysobject. 발생하며, 그 결과 HTML 태그를 열기 전까지 제어할 수 있습니다. 또한 i& # 39 m, 디버그 모드로 렌더링 idfsysobject. 여부를 제어할 수 있는 정보.

  protected override void Render(System.Web.UI.HtmlTextWriter writer)
  {
     try
     {
        // Render the module to a local a temporary writer so that if an Exception occurs
        // the control is not halfway rendered - "it is all or nothing" proposition
        System.IO.StringWriter sw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
        base.Render(htw);

        // We made it!  Copy the Control Render over
        writer.Write(sw.GetStringBuilder().ToString());
     }
     catch (System.Exception ex)
     {
        string message = string.Format("Error Rendering Control {0}\n", ID);
        Log.Error(message, ex);
        if (Page.IsDebug)
           writer.Write(string.Format("{0}<br>Exception:<br><pre>{1}\n{2}</pre>", message, ex.Message, ex.StackTrace));
     }
  }

나는 안다 (확실치 않음 [응답이] https://stackoverflow.com/questions/10793/catching-unhandled-exceptions-in-aspnet-usercontrols # 15999). 알프레드는요 로드중 추가하여 사용자의 제어하는지 너회의 통제서 취합은?

그게 (bit) 에 이어 전체 집중식으로 &quot update"; 부분. Safeloader desktopplatforms 언제 어디서나 사용할 수 있는 유연성을 발휘할 수 있습니다.

나는 왜 don& 느낄 수 있는지 알고 있습니다 # 39, Html / 제어할 수 없는 액세스만? Html 이 목표는 사프로이더 에로남이네 care 됩니다, output&quot &quot 시도하고, 어떤 너회가 않습니다. 제어 (내의 bubble&quot ";) 현재 상태의 있는지 확인 및 로드되는지.

만약 그렇다면 (즉, html 반환됨) 그런 다음, 이를 통해 할 수 있는 능력을 추가 컨트롤을 출력입니다 너희는너희가 같은 html, 수집, 있는모든!

그렇지 않으면 다시 할 수 있고, 사용자 정의 오류 메시지가 렌더링합니다 던지는 너희는너희가 같은 예외가 아니다. 선택은 자유다!

좋겠다, 그렇지 않을 경우 이를 통해 셨으며 구체화합니다 당신꺼에요 desktopplatforms 내 구주 예수님 (:)

그 중 오류 처리 렌더링합니다 우저콘트럴 추가에는 어때 새로운 하위 클래스를 로드할 수 있는 방법 (않했느뇨 그들이 원하는 대로 숨기십시오) 의 상속 후 이를 통해 사용자 통제서?

글로바레비아사스 및 Application_Error?

http://www.15seconds.com/issue/030102.htm

Page_error 이벤트가 또는 개별 페이지만:

http://support.microsoft.com/kb/306355

void Page_Load(object sender, System.EventArgs e)
{
    throw(new ArgumentNullException());
}

public void Page_Error(object sender,EventArgs e)
{
    Exception objErr = Server.GetLastError().GetBaseException();
    string err =    "<b>Error Caught in Page_Error event</b><hr><br>" + 
                    "<br><b>Error in: </b>" + Request.Url.ToString() +
                    "<br><b>Error Message: </b>" + objErr.Message.ToString()+
                    "<br><b>Stack Trace:</b><br>" + 
                      objErr.StackTrace.ToString();
    Response.Write(err.ToString());
    Server.ClearError();
}

또한 카를 세구린 (아아아안녀어엉 카를!) 그 후 슈테판들러 사용에 관한 것이다.

http://codebetter.com/blogs/karlseguin/archive/2006/06/12/146356.aspx

(잘 모르는 사용 권한 재현할 수 있지만 스케쳐내 것가운데 답을 내 업보테 잡을라는데 쓸 수 있습니다)