Czasami w twojej aplikacji pojawia się scenariusz związany z przekazaniem informacji “X” z JavaScript do C#.
W tym wypadku prezentuję sytuację, w której przycisk ma wykonywać daną operację w C# tylko, gdy użytkownik sam wcześniej potwierdził wykonanie tej operacji w JavaScript.
Wbrew pozorom jest to częsty scenariusz , a oto najprostsze rozwiązanie. Na stronie HTML umieszczamy kontrolkę “Hidden”. Jest to zwykła kontrolka HTML więc może być manipulowana za pomocą JavaScript bez problemów.
Jeśli ustawimy właściwość tej kontrolki na “runat=”server” , to będzie można do niej uzyskać dostęp w kodzie serwerowym w C#. W kodzie poniżej znajduje się funkcja JavaScript “zapisInformacji()”.
Wywoła ona okno dialogowe i w zależności od decyzji użytkownika zapisze inną informację w kontrolce “hidden”. Funkcja ta jest wywoływana przy naciśnięciu przycisku.
<% @ Page Language="C#" AutoEventWireup="true" CodeBehind="Page.aspx.cs" Inherits="PopUp.Page" ViewStateMode="Disabled" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title> Przekazywanie wartosci z JavaScript do C# ASP.NET</title>
<script type="text/javascript">
function zapisInformacj() {
var dana;
if (confirm("Chcesz wykonac operacje X") == true)
dana = true;
else
dana = false;
document.getElementById("Hidden1").value = dana;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<input id="Hidden1" type="hidden" runat="server" />
<asp:Button ID="btn" runat="server" OnClientClick="zapisInformacj()" Text="Operacja X"
onclick="btn_Click"/>
</form>
</body>
</html>
Po stronie serwer w C# wywoła się zdarzenie kliknięcia dla przycisku, który ma wywołać operacje “X” pod warunkiem , że użytkownik wyraził zgodę. Jak widać w kodzie poniżej odczytanie wartości kontrolki “Hidden” jest banalnie proste.
using System;
namespace PopUp
{
public partial class Page : System.Web.UI.Page
{
protected void btn_Click(object sender, EventArgs e)
{
if (Hidden1.Value == "true")
{
Response.Write("Wykonałeś operacje X");
}
else
{
Response.Write("operacja X została odrzucona przez ciebie");
}
}
}
}
Ważna jest jednak kolejność wykonywanych operacji. Jeśli kod po stronie serwera wykona się najpierw to nie osiągniemy zamierzonego efektu. Standardowo operacje dla przycisku po stronie klienta uruchamiają się najpierw.