Saya mencari cara paling efisien / standar untuk mengirimkan data antara kode JavaScript sisi klien dan kode C # di balik aplikasi ASP.NET. Saya telah menggunakan metode berikut untuk mencapai ini, tetapi mereka semua merasa sedikit fudge.
Untuk meneruskan data dari JavaScript ke kode C # adalah dengan mengatur variabel ASP tersembunyi dan memicu postback:
<asp:HiddenField ID="RandomList" runat="server" />
function SetDataField(data) {
document.getElementById('<%=RandomList.ClientID%>').value = data;
}
Kemudian dalam kode C # saya mengumpulkan daftar:
protected void GetData(object sender, EventArgs e)
{
var _list = RandomList.value;
}
Kembali ke arah lain, saya sering menggunakan ScriptManager untuk mendaftarkan fungsi dan meneruskan data selama Page_Load:
ScriptManager.RegisterStartupScript(this.GetType(), "Set","get("Test();",true);
atau saya menambahkan atribut ke kontrol sebelum posting kembali atau selama tahap inisialisasi atau pra-render:
Btn.Attributes.Add("onclick", "DisplayMessage("Hello");");
Metode-metode ini telah membantu saya dengan baik dan melakukan pekerjaan itu, tetapi mereka tidak merasa lengkap. Apakah ada cara yang lebih standar untuk mengirimkan data antara sisi klien JavaScript dan kode C # back-end?
Saya telah melihat beberapa posting seperti ini yang menggambarkan kelas HtmlElement; Apakah ini sesuatu yang harus saya perhatikan?
sumber
Jawaban:
Anda dapat dengan mudah dan mudah memanggil metode halaman statis dari JavaScript seperti dalam contoh ini . Jika Anda perlu memanggil metode dari beberapa halaman, Anda dapat mengatur layanan web dan memanggilnya dari Javascript dengan cara yang sama. Contoh juga termasuk di bawah ini.
.aspx Code
Kode di belakang Kode
Kode Javascript
CATATAN: Metode halaman harus statis. Ini bisa menjadi masalah bagi Anda, tergantung pada apa yang coba dilakukan aplikasi. Namun, jika informasi tersebut didasarkan pada sesi sama sekali, dan Anda menggunakan semacam otentikasi bawaan, Anda dapat menempatkan atribut EnableSession pada dekorator WebMethod, dan itu akan memungkinkan Anda untuk mendapatkan di HttpContext.Current.User, Sesi, dll.
sumber
Saya akan merekomendasikan melihat jQuery. JQuery dapat digunakan untuk membuat panggilan AJAX kembali ke server, yang dapat data kembali dalam format apa pun yang Anda butuhkan - format yang baik bisa JSON, karena dapat digunakan secara langsung dalam javascript.
Untuk menarik data dari server ke javascript menggunakan jQuery , pengambilan berikut membuat permintaan asinkron ke http://youserver.com/my/uri dan menerima data dari server dalam fungsi yang disediakan.
Mengirim data dari javascript ke server bekerja dengan cara yang sama:
sumber
Microsoft telah memuji
UpdatePanel
kontrol untuk melakukan ajax sehingga bisa dibilang cara "standar". Saya pribadi tidak akan merekomendasikan menggunakannya, ia tidak memiliki set fitur kaya dan kontrol yang Anda miliki ketika menggunakan JavaScript secara langsung.Inilah cara saya secara pribadi melakukannya:
Buat bidang tersembunyi untuk nilai sisi klien apa pun yang ingin Anda gunakan dalam postback halaman standar (yaitu ketika pengguna mengirim klik)
Dalam kode di belakang register kontrol yang ingin Anda gunakan sisi klien.
Gunakan pustaka javascript * untuk melakukan postingan / get ajax Anda lalu gunakan JavaScript untuk memperbarui halaman berdasarkan respons
Tulis halaman "ajax" yang menentukan metode render untuk melakukan pekerjaannya.
* Ada banyak perpustakaan untuk dipilih, Anda bahkan dapat menggulirnya sendiri. Saya akan merekomendasikan jQuery , stabil dan memiliki set fitur yang luas.
sumber
JSON adalah cara praktik terbaik untuk menyelesaikan tugas. Jangan melihat masalah sebagai lewat antara "C # dan JavaScript". Cara berpikir ini mengarah ke keanehan kode seperti apa yang Anda miliki di pos asli.
Lebih umum, itu hanya melewati objek antara klien dan server dengan cara agnostik bahasa. JSON sangat bagus untuk tugas karena didukung secara luas dan mudah dibaca.
sumber
Untuk menetapkan tag input yang tidak memerlukan asp sisi server, Anda dapat menggunakan: (atau <% #%> untuk penyatuan data formulir)
html:
kontrol asp:
untuk mendapatkan nilai pada postback
Jika itu, asp mengontrol input tersembunyi, Anda dapat menggunakan
Bagian yang rapi tentang Request.Form adalah jika Anda memiliki beberapa tag dengan atribut "nama" yang sama, itu akan mengembalikan hasilnya dalam CSV.
sumber