2013-05-10 11 views
7

Rozumiem różnicę między skryptami po stronie klienta i po stronie serwera. Mam funkcji JavaScript i zmienną w moim MasterPage:Ustawianie wartości zmiennej javascript z kodu za (C#)

<script language="JavaScript" type="text/javascript"> 
    var needToConfirm = false; 
      window.onbeforeunload = confirmExit; 
      function confirmExit() 
      { 
      if (needToConfirm) 
      { 
       needToConfirm = false; 
       return "Currently in edit mode. If you leave the page now then you will lose unsaved changes." 
      } 
      } 
</script> 

biorąc pod uwagę fakt, że na moim ASP.NET (po stronie klienta) można zmienić wartość mojego zmiennej needToConfirm do trueonClientClick ale domyślnie jest fałszywa . Oto przykład.

<asp:Button ID="btnEdit" runat="server" Text=" Edit " onclick="btnEdit_Click" OnClientClick="needToConfirm = true;" /> 

Teraz tutaj jest pytanie, kiedy w C# (server-side) muszę ustawić needToConfirm true pod if-statement ale niekoniecznie na Page_Load:

private void SetDefault() 

    if (Session[def.ID_CUST] != null) 
    { 
      //I want to change the variable value here 
    } 
} 

Dzięki.

UPDATE

Używam .NET 2.0 klasyczna WebForms

+2

Bezpośrednie wywołanie skryptu z serwera jest niemożliwe.Można jednak użyć skryptu ClientScript.RegisterStartup(). – Olrac

Odpowiedz

6

w kodzie za:

ScriptManager.RegisterStartupScript(this, this.GetType(), "", "urFunction('urValHere');", true); 

na stronie klienta:

function urFunction(urParam) { 
     //do what u want here 
     //use urParam 
    } 
5

Można użyć ukrytego wejścia, a następnie ustawić wejście do true lub false od strony serwera.

Po stronie klienta:

<input type="hidden" id="hdnConfirm" runat="server" value="false"/> 

Następnie po stronie serwera:

if (Session[def.ID_CUST] != null) 
    { 
      //I want to change the variable value here 
      hdnConfirm.Value = "true"; 
    } 

Następnie po stronie klienta:

var needToConfirm = $('#hdnConfirm').val(); 
+0

możesz rozwinąć go bardziej. lub umieścić jakieś szczegóły (przykład kodu)? –

+0

var needToConfirm = false; użyj tego. var needToConfirm = $ ('# hdnValue'). Val(); wystarczy ustawić wartość hdnValue w codebehind –

+0

pozwól mi spróbować tego pierwszego. –

2

Jeśli dobrze rozumiem to poprawnie, można zarejestruj skrypt klienta, tak jak w przykładzie pod numerem http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx.

ClientScriptManager cs = Page.ClientScript; 
if (!cs.IsStartupScriptRegistered(this.GetType(), "EditMode")) { 
    cs.RegisterStartupScript(this.GetType(), "EditMode", "needToConfirm = true;", true); 
} 

To by napisać skrypt do strony ustawiając wartość needToConfirm w JavaScript.

+0

To działało dla 'Page_Load', ale co z tym, kiedy w osobnej metodzie w C#? –

+0

Powinien działać w sposób określony w dowolnej metodzie dziedziczącej "System.Web.UI.Page". Kliknięcia przycisków, posty zwrotne itp., Itp. –

+0

tak, ale tak naprawdę nie muszę wywoływać zmian zmiennych w kliknięciach przycisków i postbackach. W każdym razie dzięki. –

1

Tylko w celach informacyjnych. Oto 4,5 sposób zrobić coś takiego:

// Define the name and type of the client scripts on the page. 
const String csname1 = "MyScriptName"; 
Type cstype = this.GetType(); 

// Get a ClientScriptManager reference from the Page class. 
ClientScriptManager cs = Page.ClientScript; 

// Check to see if the startup script is already registered. 
if (!cs.IsStartupScriptRegistered(cstype, csname1)) 
{ 
     StringBuilder cstext1 = new StringBuilder(); 
     cstext1.Append("<script> var myVariable = true; </"); 
     cstext1.Append("script>"); 

     cs.RegisterStartupScript(cstype, csname1, cstext1.ToString()); 
    } 

http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerstartupscript(v=vs.110).aspx

0

Maby to pomaga?

<script type="text/javascript"> 
    function test(confirm){ 
     var needToConfirm = confirm; 
     window.onbeforeunload = confirmExit; 
     function confirmExit() { 
      if (needToConfirm) { 
       needToConfirm = false; 
       return "Currently in edit mode. If you leave the page now then you will lose unsaved changes." 
      } 
     } 
    } 
</script> 



<asp:Button ID="btnEdit" runat="server" Text="Edit" onclick="btnEdit_Click" OnClientClick="javascript:test(true);" /> 
+1

właśnie zrealizowałem im trochę późno ... – hunteroooox

Powiązane problemy