2011-11-21 19 views
13

Czy istnieje sposób na wymuszenie odświeżenia kodu?Wymuszenie odżegnania

Czekam na wymuszenie wywołania zwrotnego od metody w kodzie C# za moją aplikacją WWW asp.net.

+1

Czy możesz być bardziej konkretny - i powiedz nam, co do tej pory próbowaliście? –

+1

eh, odświeżenie jest od klienta (przeglądarki) do serwera. Więc kod C# (który działa na serwerze) nie może tego zrobić. –

+0

Myślę, że twoje pytanie jest podobne do tego podniesionego [tutaj] (http://stackoverflow.com/questions/1418532/how-to-force-a-postback-z-asp-net-and-c-sharp) – seanzi

Odpowiedz

9

odświeżenie strony jest wyzwalany po przedłożeniu formularza, więc jest to związane z działaniem klienta ... spojrzeć tutaj o wyjaśnienie: ASP.NET - Is it possible to trigger a postback from server code?

i tutaj rozwiązania: http://forums.asp.net/t/928411.aspx/1

+0

To działało! Dzięki! –

+2

Dla osób używających nowszych wersji .NET, należy użyć 'Page.ClientScript.GetPostBackEventReference', ponieważ" this.GetPostBackEventReference (...) "jest przestarzałe. Również prawdopodobnie 'Page.ClientScript.RegisterStartupScript (...)'. – AzNjoE

1

Nie, nie z kodu. Odświeżenie jest żądaniem zainicjowanym ze strony na kliencie zwróconej do siebie na serwerze za pomocą metody POST Http. Po stronie serwera możesz poprosić o przekierowanie, ale będzie to żądanie HETP GET.

0

Można ręcznie wywołać metodę wywoływana przez odświeżenie strony z imprezy Page_Load:

public void Page_Load(object sender, EventArgs e) 
{ 
    MyPostBackMethod(sender, e); 
} 

Ale jeśli masz na myśli, czy można mieć Page.IsPostBack właściwość zestaw do true bez prawdziwego postu powrotem, to odpowiedź nie jest.

0

Można użyć kontrolki związanej z danymi, takiej jak Repeater lub ListView, w razie potrzeby ponownie powiązać ją z listą właściwości kontrolnych i pozwolić jej dynamicznie generować formanty.

Alternatywnie można użyć Response.Redirect("."), aby ponownie załadować tę samą stronę.

6

Możesz spróbować przekierować na tę samą stronę.

Response.Redirect(Request.RawUrl); 
+0

Ale wtedy wartości formularzy są tracone ... –

+0

@ Protectorone nie, chyba że najpierw wyślemy je do bazy danych i wczytaj ponownie w późniejszym odświeżeniu strony w Page_Load() – Fandango68

4

Prostsze:

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack(sender, e)", true); 
0

Stosując Server.Transfer ("YourCurrentPage.aspx"); możemy z łatwością to osiągnąć i jest to lepsze niż Response.Redirect(); coz Server.Transfer() pozwoli Ci zaoszczędzić czas podróży w obie strony.

+0

Czy to nie resetuje pól formularza? Przypuszczam, że to jest jak świeże wywołanie strony, co oznacza, że ​​dane wejściowe użytkownika, takie jak filtry, zostaną cofnięte (jeśli nie zostaną zapisane w sesji). – Undercover1989

1

Oto rozwiązanie z http://forums.asp.net/t/928411.aspx/1 wymienione przez mamoo - na wszelki wypadek, gdy strona przejdzie w tryb offline. Sprawdziło się dobrze dla mnie.

StringBuilder sbScript = new StringBuilder(); 

sbScript.Append("<script language='JavaScript' type='text/javascript'>\n"); 
sbScript.Append("<!--\n"); 
sbScript.Append(this.GetPostBackEventReference(this, "PBArg") + ";\n"); 
sbScript.Append("// -->\n"); 
sbScript.Append("</script>\n"); 

this.RegisterStartupScript("AutoPostBackScript", sbScript.ToString());