JavaScript i ASP .NET

0

Cześć, potrzebuję użyć JS w ASP .NET, szukałem na ten temat, ale znalazłem tylko takie podstawowe rzeczy, które u mnie się nie sprawdzają.

Jak to wszystko ma działać:
Moja strona otwiera inną stronę poprzez window.open - to ok
Otwarta strona ma w sobie TextBoxa i Buttona. Po wciśnięciu buttona, ma się zapisać do bazy to, co jest w TextBoxie, następnie odświeżyć strona, która otworzyła(opener) no i aktualne okno ma sie zamknąć.

O ile na początku nie mialem z tym problemu, bo kod JS był "jawnie" przekazany, to odkąd przeniosłem go do pliku już mi nie działa.

Robię to w taki sposób:

protected void Page_Load(object sender, EventArgs e)
{
  Page.RegisterClientScriptBlock("func", "<script language=javascript src='../func.js'></script>");
}

  
protected void OKButton_Click(object sender, EventArgs e)
{
  //tutaj wykonuję najpierw inny kod, a na końcu:
  Response.Write("<script>ReloadPage(window.opener); window.close()</script>");        
}

Wyskakuje mi komunikat w IE "Oczekiwano obiektu" w linii 1, znak 1 :/

Funkcja ReloadPage aktualnie wygląda tak:

function ReloadPage(w)
{
  alert("Test");
}

Co tu jest nie tak?

0

Po pierwsze primo: nie tak:

Page.RegisterClientScriptBlock

tylko

Page.ClientScript.RegisterClientScriptInclude

Pierwsze jest obsolete to raz, a dwa, ze to nie rejestruje includa jako takiego tylko wstawia blok skryptu gdzies w ciele.

Po drugie primo, masz nie znaleziono obiektu, gdyz to co robisz w Reponse.Write trafia na sam poczatek strony, tak wiec przegladarka przetwarza ta instrukcje zanim dojdzie do przetworzenia zincludowanego skryptu, wiec nic dziwnego, ze nie mozne znalezc funkcji ReloadPage.

Po trzecie primo: nie prosciej zrobic w aspx:

<asp:Button runat="server" ID="OKButton" OnClientClick="ReloadPage(window.opener); window.close(); return false;"/>

return false, aby nie wykonal sie domyslny event dla buttona, czyli submit formularza

ewentualnie mozesz niemal to samo zrobic np. w Page_PreRender

OKButton.OnClientClick = "....";

lub nawet

OKButton.Attributes.Add("onclick", "...");

i tak dalej i tak dalej....

0
mj napisał(a)

lub nawet

OKButton.Attributes.Add("onclick", "...");

i tak dalej i tak dalej....

Myślałem o tym, ale wtedy się bałem, że nie wykona mi się kod w ButtonClick.

A co zrobić, jeśli bym chciał wywołaś JS w ButtonClick, ale tylko w pewnych warunkach?

0

No ale i tak kod w OKButton_Click nie robi nic innego jak wstawia jakis JS.
jak zwrocisz z JSowego onclick'a false to nie bedzie postbacka, jak true to bedzie. Jak chcesz warunkowo cos wykonac to sobie odpowiednia funkcje w JS napisz.

0
mj napisał(a)

No ale i tak kod w OKButton_Click nie robi nic innego jak wstawia jakis JS.

No robi ;)
Umieściłem to w komentarzu ;)

Konkretnie zapisuje pewne rzeczy do bazy danych.

Kurcze, nie da rady zrobić czegoś takiego, jak w php?

echo "<script>WykonajJavaScript</script>";

:)

0

Page.ClientScript.RegisterStartupScript?
Page.ClientScript.RegisterClientScriptBlock?

0

Musisz pamietac, ze rendering strony idzie niemal na samym koncu lancucha eventow, czyli jak masz obsluge OnClick guzika (po stronie serwera) to ona jest wczesniej niz Render strony i cokolwiek zrobisz w Response.Write pojdzie na sam poczatek strony, a dopiero potem asp.net wyrenderuje reszte.
Poczytaj sobie o ASP.NET page lifecycle.
PHP jest troszke mniej zlozonym mechnizmem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1