Diberikan kelas berikut dan metode tindakan pengontrol:
public School
{
public Int32 ID { get; set; }
publig String Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Street1 { get; set; }
public string City { get; set; }
public String ZipCode { get; set; }
public String State { get; set; }
public String Country { get; set; }
}
[Authorize(Roles = "SchoolEditor")]
[AcceptVerbs(HttpVerbs.Post)]
public SchoolResponse Edit(Int32 id, FormCollection form)
{
School school = GetSchoolFromRepository(id);
UpdateModel(school, form);
return new SchoolResponse() { School = school };
}
Dan formulir berikut:
<form method="post">
School: <%= Html.TextBox("Name") %><br />
Street: <%= Html.TextBox("Address.Street") %><br />
City: <%= Html.TextBox("Address.City") %><br />
Zip Code: <%= Html.TextBox("Address.ZipCode") %><br />
Sate: <select id="Address.State"></select><br />
Country: <select id="Address.Country"></select><br />
</form>
Saya dapat memperbarui instance Sekolah dan anggota Alamat sekolah. Ini cukup bagus! Terima kasih tim ASP.NET MVC!
Namun, bagaimana cara menggunakan jQuery untuk memilih daftar drop-down sehingga saya dapat mengisinya? Saya menyadari bahwa saya bisa melakukan sisi server ini tetapi akan ada elemen dinamis lainnya pada halaman yang mempengaruhi daftar.
Berikut ini adalah apa yang saya miliki sejauh ini, dan itu tidak berfungsi karena pemilih tampaknya tidak cocok dengan ID:
$(function() {
$.getJSON("/Location/GetCountryList", null, function(data) {
$("#Address.Country").fillSelect(data);
});
$("#Address.Country").change(function() {
$.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) {
$("#Address.State").fillSelect(data);
});
});
});
javascript
jquery
jquery-selectors
Doug Wilson
sumber
sumber
Jawaban:
Dari Google Groups :
Jadi, saya kira Anda sedang melihatnya
Lihat juga Bagaimana cara memilih elemen dengan ID yang memiliki karakter yang digunakan dalam notasi CSS? di FAQ jQuery.
sumber
Anda tidak dapat menggunakan pemilih id jQuery jika id berisi spasi. Gunakan pemilih atribut:
Jika memungkinkan, tentukan juga jenis elemen:
sumber
Escape it for Jquery:
contoh penggunaan:
info lebih lanjut di sini .
sumber
Calon Rilis dari ASP.NET MVC yang baru saja dirilis memperbaiki masalah ini, sekarang menggantikan titik-titik dengan garis bawah untuk atribut ID.
Memberikan kepada
Untuk informasi lebih lanjut, lihat catatan rilis, mulai dari halaman 14.
sumber
Ini didokumentasikan dalam dokumen penyeleksi jQuery :
Singkatnya, awali
.
dengan\\
sebagai berikut:Mengapa
.
ID saya tidak berfungsi?Masalahnya adalah yang
.
memiliki signifikansi khusus, string berikut ditafsirkan sebagai pemilih kelas. Jadi$('#Address.Country')
akan cocok<div id="Address" class="Country">
.Ketika lolos sebagai
\\.
, titik akan diperlakukan sebagai teks normal tanpa arti khusus, cocok dengan ID yang Anda inginkan<div id="Address.Country">
.Ini berlaku untuk semua karakter
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
yang seharusnya memiliki arti khusus sebagai pemilih di jQuery. Cukup tambahkan\\
untuk memperlakukan mereka sebagai teks biasa.Kenapa 2
\\
?Seperti disebutkan dalam jawaban bdukes, ada alasan kita membutuhkan 2
\
karakter.\
akan keluar dari karakter berikut dalam JavaScript. Se ketika JavaScript mengartikan string"#Address\.Country"
, ia akan melihat\
, mengartikannya dengan mengambil karakter berikut secara litteral dan menghapusnya ketika string diteruskan sebagai argumen$()
. Itu berarti jQuery masih akan melihat string sebagai"#Address.Country"
.Di situlah yang kedua
\
datang untuk bermain. Yang pertama memberi tahu JavaScript untuk menafsirkan yang kedua sebagai karakter literal (non-khusus). Ini berarti yang kedua akan dilihat oleh jQuery dan memahami bahwa.
karakter berikut adalah karakter literal.Fiuh! Mungkin kita bisa memvisualisasikannya.
sumber
Menggunakan dua Backslash tidak apa-apa, itu berfungsi. Tetapi jika Anda menggunakan nama dinamis, maksud saya, nama variabel, Anda harus mengganti karakter.
Jika Anda tidak ingin mengubah nama variabel Anda, Anda dapat melakukan ini:
dan daripada Anda memiliki objek jquery Anda.
sumber
Hanya informasi tambahan: Lihat masalah ASP.NET MVC # 2403 ini .
Sampai masalah ini diperbaiki, saya menggunakan metode ekstensi saya sendiri seperti Html.TextBoxFixed, dll. Yang hanya menggantikan titik-titik dengan garis bawah pada atribut id (bukan dalam atribut nama), sehingga Anda menggunakan jquery seperti $ ("# Address_Street") tetapi di server, itu seperti Address.Street.
Kode contoh berikut:
sumber
Saya memecahkan masalah dengan solusi yang diberikan oleh dokumen jquery
Fungsi saya:
Catatan: saya menghapus "#" karena dalam kode saya saya menggabungkan ID dengan teks lain
Font: Jquery Docs pilih elemen dengan karakter utama
sumber