2010-07-27 2 views
1

У меня есть этот javascript-мода, который я хочу использовать для сообщения об ошибках. Все работает хорошо только, что код выполняется до загрузки страницы. Поэтому результат заключается в том, что у меня есть javascript перед тегом head, что означает, что ничего не выполняется!Page_Load question

Любая помощь?

public void showError(string error) 
{ 
    string script = "<script type=\"text/javascript\">$.facebox.settings.opacity = 0.4;jQuery.facebox(\""+error+"\");</script>";   
    System.Web.HttpContext.Current.Response.Write(script);   
} 

Кстати, мой метод ShowError находится в классе под названием ErrorDisplay Это, как я это называю:

string strErr = "error here"; 
      ErrorDisplay myError = new ErrorDisplay(); 
      myError.ShowError(strErr); 
+0

Небольшой код был бы полезен –

ответ

1

Это, как я достиг этого:

public void ShowError(Page CurrentPage,string error) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("<script type='text/javascript'>"); 
    sb.Append("$.facebox.settings.opacity = 0.4;"); 
    sb.AppendFormat("jQuery.facebox('{0}');", error); 
    sb.Append("</script>"); 

    Type t = this.GetType(); 

    CurrentPage.ClientScript.RegisterStartupScript(t, "ErrorScript", sb.ToString()); 
} 

Когда я называю его (это, «струнный ошибка»);

Большое спасибо ребятам!

2

Если предположить, что просто хотите иметь код в Page_Load под названием позже попробуйте использовать Page_PreRender метод вместо этого. Вы можете найти список событий и порядок, который они здесь назвали http://msdn.microsoft.com/en-us/library/aa479007.aspx

3

Основная проблема заключается в том, что вам нужно заставить Javascript ждать, пока DOM будет готов, прежде чем он будет выполнен.

Самый простой способ обойти это использовать метод ClientScriptManager.RegisterStartupScript для выполнения кода, а не добавить его на страницу непосредственно:

public void Page_Load(Object sender, EventArgs e) 
{ 
    Type myType = this.GetType(); 
    string script = "<script>alert('Hello World! I am ready.');</script>"; 

    Page.ClientScript.RegisterStartupScript(myType, "StartupScript", script); 
} 

UPDATE

Мой пример был основан на том, что ваш оригинальный вопрос касался именно Page_Load. Код нужно только немного изменить, чтобы соответствовать вашему примеру, хотя:

public void ShowError(string error) 
{ 
    StringBuilder sb = new StringBuilder(); 
    s.Append("<script type='text/javascript'>"); 
    s.Append("$.facebox.settings.opacity = 0.4;"); 
    s.AppendFormat("$.facebox('{0}');", error); 
    s.Append("</script>"); 

    Type t = this.GetType(); 
    Page.ClientScript.RegisterStartupScript(t, "ErrorScript", sb.ToString()); 
} 
+0

Хорошо, позвольте мне немного пояснить. У меня есть класс, который отображает ошибки на моей странице. Все, что я делаю, это передать строку, и она показывает ошибку. Будет ли этот код работать? Как получить доступ к this.GetType из класса? – Churchill

+0

@ Kenyana - Измените свое оригинальное сообщение на примере вашего кода. На данный момент я не понимаю, что вы делаете. –

+0

Посмотрите на мой пример кода. Иногда мне не обязательно выполнять его при загрузке страницы, но когда какая-то функция называется e.t.c. – Churchill