Szukam najbardziej wydajnego / standardowego sposobu przesyłania danych między kodem JavaScript po stronie klienta a kodem C # za aplikacją ASP.NET. Użyłem następujących metod, aby to osiągnąć, ale wszystkie mają trochę krówki.
Aby przekazać dane z JavaScript do kodu C #, należy ustawić ukryte zmienne ASP i wywołać zwrotny:
<asp:HiddenField ID="RandomList" runat="server" />
function SetDataField(data) {
document.getElementById('<%=RandomList.ClientID%>').value = data;
}
Następnie w kodzie C # zbieram listę:
protected void GetData(object sender, EventArgs e)
{
var _list = RandomList.value;
}
Wracając w drugą stronę, często używam ScriptManager do rejestrowania funkcji i przekazywania jej danych podczas ładowania strony:
ScriptManager.RegisterStartupScript(this.GetType(), "Set","get("Test();",true);
lub dodaję atrybuty do kontrolek przed zwrotem postu lub podczas etapów inicjalizacji lub wstępnego renderowania:
Btn.Attributes.Add("onclick", "DisplayMessage("Hello");");
Te metody dobrze mi służyły i wykonują swoją pracę, ale po prostu nie są kompletne. Czy istnieje bardziej standardowy sposób przekazywania danych między kodem JavaScript po stronie klienta a kodem zaplecza C #?
Widziałem kilka postów jak ten , które opisują HTMLElement klasę; czy powinienem to sprawdzić?
źródło
Odpowiedzi:
Możesz w prosty i łatwy sposób wywołać metodę strony statycznej z JavaScript, jak w tym przykładzie . Jeśli chcesz wywołać metodę z wielu stron, możesz skonfigurować usługę internetową i wywołać ją z Javascript w ten sam sposób. Przykład również zawarty poniżej.
Kod .aspx
Kod związany z kodem
Kod JavaScript
UWAGA: Metody strony muszą być statyczne. Może to być dla ciebie problematyczne, w zależności od tego, co aplikacja próbuje zrobić. Jeśli jednak informacje w ogóle opierają się na sesji, a używasz wbudowanego uwierzytelniania, możesz umieścić atrybut EnableSession w dekoratorze WebMethod, a to pozwoli ci uzyskać HttpContext.Current.User, Sesja itp.
źródło
Polecam rzucić okiem na jQuery. JQuery może służyć do wywoływania wywołań AJAX z powrotem na serwer, który może przesyłać dane z powrotem w dowolnym wymaganym formacie - dobrym formatem może być JSON, ponieważ można go użyć bezpośrednio w javascript.
Aby pobrać dane z serwera do javascript za pomocą jQuery , następujące pobrania wysyłają asynchroniczne żądanie do http://youserver.com/my/uri i odbierają dane z serwera w dostarczonej funkcji.
Wysyłanie danych z javascript na serwer działa podobnie:
źródło
Microsoft zaimplementował
UpdatePanel
kontrolę, aby wykonać ajax, więc jest to prawdopodobnie „standardowy” sposób. Jednak osobiście nie zalecałbym korzystania z niego, ponieważ nie ma nigdzie w pobliżu bogatego zestawu funkcji i kontroli, które masz przy bezpośrednim korzystaniu z JavaScript.W ten sposób osobiście to robię:
Utwórz ukryte pola dla dowolnych wartości po stronie klienta, których chcesz używać w standardowym postback strony (tj. Kiedy użytkownik kliknie przesłać)
W kodzie poniżej zarejestruj kontrolki, których chcesz używać po stronie klienta.
Skorzystaj z biblioteki javascript *, aby wykonać swoją aukcję ajax / get, a następnie użyj JavaScript, aby zaktualizować stronę na podstawie odpowiedzi
Napisz oddzielną stronę „ajax”, która przesłania metodę renderowania do wykonania pracy.
* Istnieje wiele bibliotek do wyboru, możesz nawet tworzyć własne. Poleciłbym jQuery , jego stabilny i ma bogaty zestaw funkcji.
źródło
JSON to najlepszy sposób na wykonanie zadania. Nie patrz na problem jako przejście między „C # a JavaScript”. Ten sposób myślenia prowadzi do dziwactw w kodzie, takich jak w oryginalnym poście.
Mówiąc bardziej ogólnie, po prostu przekazuje obiekty między klientem a serwerem w sposób agnostyczny z języka. JSON doskonale nadaje się do tego zadania, ponieważ jest szeroko obsługiwany i łatwy do odczytania.
źródło
Aby ustawić tag wejściowy, który nie wymaga asp serwera, możesz użyć: (lub <% #%> dla wiązania danych formularzy)
HTML:
kontrola bolenia:
aby uzyskać wartości na postback
Jeśli to, kontrola asp ukryte wejście, możesz użyć
Zgrabną częścią Request.Form jest to, że jeśli masz wiele tagów z tym samym atrybutem „name”, zwróci wynik w CSV.
źródło