[ASP] jak wewnątrz JS wywołać metodę C#?

0

mam dwa pytania:

  1. czy można w skrypcie JS wywołać funkcję z C# (Button1_Click)?
  2. czy można w danym Buttonie dodać dwie reakcje na zdarzenie OnClick - tzn. wywołanie funkcji Button_Click z C# i wywołanie funkcji z JS?
0
<script type="text/javascript">
var min = 3;
var sec=0;
function time() {

    if(sec > 0) {
        sec--;
    } else {
        if(min > 0) {
            min--;
            sec = 59;
        }
        if(min==0 && sec==0) {
            location.href="http://www.wp.pl";
        }
    }
  
    document.getElementById('tm').innerHTML=((min < 10) ? "0" + min : min)+":"+((sec < 10) ? "0" + sec : sec);

    setTimeout("time();", 1000);
}
</script>

chcę żeby w tym miejscu: if(min==0 && sec==0) została wywołana funkcja z pliku cs

0
pppp napisał(a)
  1. czy można w danym Buttonie dodać dwie reakcje na zdarzenie OnClick - tzn. wywołanie funkcji Button_Click z C# i wywołanie funkcji z JS?

Kod C# wywołujesz przez Click, a kod JS przez OnClientClick.

0
somekind napisał(a)
pppp napisał(a)
  1. czy można w danym Buttonie dodać dwie reakcje na zdarzenie OnClick - tzn. wywołanie funkcji Button_Click z C# i wywołanie funkcji z JS?

Kod C# wywołujesz przez Click, a kod JS przez OnClientClick.

zrobiłem tak:

<asp:Button ID="Button2" runat="server" Text="Rozpocznij test" onclick="Button2_Click" OnClientClick="javascript:time()"/>

i skrypt:

<script type="text/javascript">
var min = 3;
var sec=0;
function time() {
if(sec > 0) {
        sec--;
 } 
else {
  if(min > 0) {
            min--;
            sec = 59;
                    }
        if(min==0 && sec==0) {
            location.href="http://www.wp.pl";
        }
    }
  document.getElementById('tm').innerHTML=((min < 10) ? "0" + min : min)+":"+((sec < 10) ? "0" + sec : sec);
setTimeout("time();", 1000);
}
 //-->
</script> 

i funkcja z js się nie wywołuje

Igor1981 napisał(a)

pppp napisał:

  1. czy można w skrypcie JS wywołać funkcję z C# (Button1_Click)?

Można

a w jaki sposób?

0

tak jak zdefiniowales button to nie dziwne ze nie zauwazyles jak wykonuje sie js
to nie dziala tak ze asp sobie wywrozy ze ty chcesz po wykonaniu timera js odpalic kod na serwerze
powyzej juz ktos wspomnial czego szukac
http://msdn.microsoft.com/en-us/library/ms178208.aspx
albo za pomoca ajax

0
massther napisał(a)

tak jak zdefiniowales button to nie dziwne ze nie zauwazyles jak wykonuje sie js

a jak trzeba zdefiniować button?

0

warto popatrzec jaki kod wygenerowal ci asp .net z takiego kodu
<input type="submit" name="Button2" value="Rozpocznij test" onclick="javascript:time();" id="Button2" />
co robi submit? submituje formularz, wiec twoj js moze raz funkcje wykonal i tyle

po pierwsze zastanow sie co chcesz osiagnac
po 3 min. uruchomic jakies zdarzenie na serwerze
wiec po kliknieciu przyskisku (polecam zwykly html'owy) odpalasz timer js, kiedy dojdziesz do konca odliczania odpal kod na serwerze, za pomoca callback, ajax, przekierowania na inna strone, to juz zalezy od ciebie jaka chcesz funkcjonalnasc

0

przycisk powinien być asp:Button bo chcę żeby było onClick="Button_Click" onClientClick="javascript:time()"

0

o obliczu takiej funkcji js jaka pokazales twoj przycisk z onclick klienckim i serwerowym nie ma sensu
wracamy do podstawowego pytania: ale o co chodzi? parafrazujac: co chcesz osiagnac? a powiemy ci co zle robisz i jak powinno byc dobrze

0
  1. mam stronę która jest podzielona kontrolką MultiView na 3 View
  2. na pierwszym View jest Button, którego klikniecie przekierowuje na drugi View
  3. w momencie kliknięcia Buttona powinno zacząć się odliczanie od pewnej ilości minut do zera (na drugim View powinien być widoczny stoper odliczający)
  4. na drugim View jest przycisk przekierowujący do trzeciego View, można go kliknąć wcześniej samemu, ale gdy czas minie, przycisk powinien włączyć się automatycznie i automatycznie powinien się wyłączyć drugi View i pokazać trzeci
0

no i jaki problem
na start view2 odpalasz timer, ktory po okreslonym czasie wywola zdarzenie na serwerze, a przycisk zyje swoim zyciem, nic ci do niego, js nie ma go wciskac, tylko zasymulowac jego klikniecie
wiele pomocnych rzeczy znajdziesz w Page.ClientScript
za pomoca argumentow zdarzenia mozna wykryc czy powstalo ono po kliknieciu przyciksu, czy zasymulowal je timer (oczywiscie sam musisz sobie odpowiednia wartosc przekazac i ja rozpoznac)

masz gotowca, moze bedzie to bardziej pouczajace
ale tak generalnie lepiej naucz sie najpierw technologii ktorych chesz uzywac, czyli na poczatek czysty html i jakies podstawy o protokole http, nastepnie JS, pozniej C# i asp .net, a pozniej skacz na glebsza wode

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function TimerTick(sec) {
            if (sec > 0) {
                //alert("sec:" + sec);
                document.getElementById("lblTime").innerHTML = "Do konca " + sec + " sekund.";
                window.setTimeout('TimerTick('+(sec-1)+')', 1000);
            }
            else
                EndTimer();
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:MultiView ID="MultiView1" runat="server">
            <asp:View ID="v1" runat="server">
                1<br />
                <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
            </asp:View>
            <asp:View ID="v2" runat="server">
                2<br />
                <span id="lblTime"></span>
                <script type="text/javascript">TimerTick(6);</script>
                <asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" />
            </asp:View>
            <asp:View ID="v3" runat="server">
                3<br />
                <span id="lbl3" runat="server" />
            </asp:View>
        </asp:MultiView>
    </form>
</body>
</html>
public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                MultiView1.ActiveViewIndex = 0;
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            MultiView1.ActiveViewIndex = 1;
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "afterTimer", "<script type=\"text/javascript\">function EndTimer(){" + Page.ClientScript.GetPostBackEventReference(Button2, "TIMER") +";}</script>");
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            MultiView1.ActiveViewIndex = 2;
            lbl3.InnerText = Request.Form["__EVENTARGUMENT"] == "TIMER" ? "po timerze" : "po buttonie";
        }
        
        protected override void Render(HtmlTextWriter writer)
        {
            Page.ClientScript.RegisterForEventValidation(Button2.UniqueID, "TIMER");
            base.Render(writer);
        }

    }
0

dzięki, właśnie o takie coś mi chodziło
btw, html i asp.net znam, ale takie sprawy jak callback i postback są dla mnie nowe, jednak przydałoby się ich nauczyć :d

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