Mengapa saya harus menentukan runat="server"
pada semua kontrol ASP.NET saya ketika itu adalah atribut wajib dan server
merupakan satu-satunya pilihan yang tersedia dalam pengetahuan terbatas saya tentang ASP.NET, dan saya mendapatkan kesalahan jika saya tidak menggunakannya?
Saya mengerti bahwa saya dapat menggunakannya secara opsional pada tag HTML saya, dan saya mengerti paradigma klien / server dan apa yang sebenarnya ditentukan.
Apakah itu tag berlebihan yang hanya bisa tersirat oleh kontrol menjadi kontrol ASP.NET, atau apakah ada alasan yang mendasarinya?
asp.net
runatserver
John
sumber
sumber
Web.config
, akan menjadi solusi yang sesuai. Selama proses parse, atribut default dapat disuntikkan ke DOM jika perlu. Saya akan bermain dengan ide ini ...Jawaban:
Saya selalu percaya itu ada lebih banyak untuk pemahaman bahwa Anda dapat mencampur tag ASP.NET dan Tag HTML, dan Tag HTML memiliki pilihan untuk menjadi
runat="server"
atau tidak. Tidak ada ruginya meninggalkan tag, dan itu menyebabkan kesalahan kompilator untuk mengeluarkannya. Semakin banyak hal yang Anda maksudkan tentang bahasa web, semakin tidak mudah bagi seorang programmer pemula untuk datang dan mempelajarinya. Itu alasan yang bagus untuk menjelaskan atribut tag.Percakapan ini terjadi di Blog Mike Schinkel antara dirinya dan Talbot Crowell dari Microsoft National Services. Informasi yang relevan di bawah ini (paragraf pertama diparafrasekan karena kesalahan tata bahasa dalam sumber):
Itu berlanjut:
Dia melanjutkan:
sumber
Saya biasanya tidak suka menebak, tapi saya akan membahas yang ini ...
Jika Anda ingat Microsoft. NET pemasaran hype kembali pada hari (2001?), Sulit untuk mengatakan apa itu. NET bahkan. Apakah itu server? platform pemrograman? sebuah bahasa? sesuatu yang sama sekali baru? Mengingat iklan, itu adalah ambigu apa pun yang Anda inginkan - hanya memecahkan masalah yang mungkin Anda miliki.
Jadi, dugaan saya adalah ada visi besar tersembunyi bahwa kode ASP.NET bisa berjalan di mana saja - sisi server ATAU sisi klien, dalam salinan Internet Explorer terkait dengan runtime .NET. runat = "server" hanyalah sisa-sisa peninggalan, tertinggal karena itu setara dengan sisi klien tidak pernah sampai ke produksi.
Ingat iklan-iklan aneh itu?
Terkait: Artikel dari Daftar dengan beberapa .NET history.
sumber
Tidak semua kontrol yang dapat dimasukkan dalam halaman harus dijalankan di server. Sebagai contoh:
<INPUT type="submit" runat=server />
Ini pada dasarnya sama dengan:
<asp:Button runat=server />
Hapus runat = tag server dari yang pertama dan Anda memiliki tombol HTML standar yang berjalan di browser. Ada alasan untuk dan tidak menjalankan kontrol tertentu di server, dan tidak ada cara bagi ASP.NET untuk "mengasumsikan" apa yang Anda inginkan berdasarkan markup HTML yang Anda sertakan. Mungkin saja untuk "menyimpulkan" server runat = untuk kelompok
<asp:XXX />
kontrol, tetapi tebakan saya adalah bahwa Microsoft akan mempertimbangkan peretasan ke sintaks markup dan mesin ASP.NET.sumber
Microsoft Msdn artikel Kontrol Terlupakan: Kontrol Server HTML menjelaskan penggunaan runat = "server" dengan contoh pada kotak teks
<input type="text">
dengan mengonversinya menjadi<input type="text" id="Textbox1" runat="server">
Singkatnya, untuk mengaktifkan akses terprogram ke elemen HTML, tambahkan
runat="server"
.sumber
Kecurigaan saya adalah bahwa itu ada hubungannya dengan bagaimana kontrol sisi server diidentifikasi selama pemrosesan. Daripada harus memeriksa setiap kontrol pada saat runtime dengan nama untuk menentukan apakah pemrosesan sisi server perlu dilakukan, ia melakukan seleksi pada representasi simpul internal dengan tag. Compiler memeriksa untuk memastikan bahwa semua kontrol yang memerlukan tag server memilikinya selama langkah validasi.
sumber
Elemen HTML dalam file ASP.NET, secara default, diperlakukan sebagai teks. Untuk membuat elemen-elemen ini dapat diprogram, tambahkan
runat="server"
atribut ke elemen HTML. Atribut ini menunjukkan bahwa elemen tersebut harus diperlakukan sebagai kontrol server.sumber
Itu ada di sana karena semua kontrol dalam ASP. NET mewarisi dari System.Web.UI.Control yang memiliki atribut "runat".
di kelas System.Web.UI.HTMLControl, atribut tidak diperlukan, namun, di kelas System.Web.UI.WebControl atribut diperlukan.
sunting: izinkan saya lebih spesifik. karena asp.net cukup abstrak dari HTML, kompiler memerlukan semacam arahan sehingga ia tahu bahwa tag tertentu perlu menjalankan sisi server. jika atribut itu tidak ada maka tidak akan tahu untuk memprosesnya di server terlebih dahulu. jika tidak ada maka diasumsikan itu adalah markup reguler dan meneruskannya ke klien.
sumber
Saya berpikir bahwa Microsoft dapat memperbaiki ambiguitas ini dengan membuat kompiler menambahkan atribut runat sebelum halaman tersebut dikompilasi, sesuatu seperti tipe-erasure yang dimiliki java dengan generik, alih-alih menghapus, bisa menulis runat = server di mana pun ia melihat asp: awalan untuk tag, sehingga pengembang tidak perlu khawatir tentang hal itu.
sumber
Jika Anda menggunakannya pada tag html normal, itu berarti bahwa Anda dapat memanipulasinya secara program di event handler dll, misalnya mengubah href atau kelas tag anchor pada pemuatan halaman ... hanya lakukan itu jika Anda harus, karena vanilla html tag lebih cepat.
Sejauh kontrol pengguna dan kontrol server, tidak, mereka hanya tidak akan bekerja tanpanya, tanpa menggali bagian dalam preprocessor aspx, tidak bisa mengatakan dengan tepat mengapa, tetapi akan menebak bahwa untuk alasan yang mungkin bagus, mereka hanya menulis pengurai seperti itu, mencari hal-hal yang secara eksplisit ditandai sebagai "melakukan sesuatu".
Jika @JonSkeet ada di mana saja, ia mungkin akan dapat memberikan jawaban yang jauh lebih baik.
sumber
Saat mengirimkan data ke server Web ASP.NET, kontrol yang disebut Runat = "server" akan direpresentasikan sebagai objek Dot Net di Aplikasi Server. Anda dapat secara manual mengetik kode dalam kontrol HTML atau menggunakan opsi Run As Server dengan mengklik kanan pada tampilan desain. Kontrol ASP.NET akan secara otomatis mendapatkan atribut ini setelah Anda menyeretnya dari kotak alat di mana biasanya kontrol HTML tidak.
sumber
Atribut yang cukup berlebihan, mengingat tag "asp" jelas merupakan elemen ASP dan harus cukup untuk mengidentifikasinya sebagai elemen yang dapat diakses sisi server.
Namun di tempat lain digunakan untuk meninggikan tag normal untuk digunakan dalam kode-belakang.
sumber
Saya baru saja sampai pada kesimpulan ini dengan trial-and-error: runat = "server" diperlukan untuk mengakses elemen saat run-time di sisi server. Hapus, kompilasi ulang dan tonton apa yang terjadi.
sumber
runat="Server"
menunjukkan postback ke server akan terjadi untuk "kontrol" HTML.Formulir Web digunakan
postback
terus-menerus untuk memberi sinyal server untuk memproses acara kontrol halaman..NET
MVC
halaman JANGAN gunakanpostback
(kecuali formulir"submit"
).MVC
mengandalkanJQUERY
untuk mengelola halaman di sisi klien (sehingga melewati kebutuhan akan banyakpostback
pesan ke server).Jadi:
.NET
Formulir Web ... gunakan"runat"
banyak atribut di markup halaman..NET
MVC
jarang menggunakan"runat"
atribut di markup halaman.Semoga ini bisa membantu menjelaskan mengapa
runat
perlu ...sumber