Dadas las siguientes clases y método de acción del controlador:
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 };
}
Y la siguiente forma:
<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>
Puedo actualizar tanto la instancia de la escuela como el miembro de la dirección de la escuela. ¡Esto es bastante bueno! ¡Gracias al equipo ASP.NET MVC!
Sin embargo, ¿cómo uso jQuery para seleccionar la lista desplegable para poder completarla previamente? Me doy cuenta de que podría hacer este lado del servidor, pero habrá otros elementos dinámicos en la página que afectarán la lista.
Lo siguiente es lo que tengo hasta ahora, y no funciona ya que los selectores no parecen coincidir con los 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
fuente
fuente
Respuestas:
De Grupos de Google :
Entonces, supongo que estás mirando
Consulte también ¿Cómo selecciono un elemento por una ID que tiene caracteres utilizados en notación CSS? en las preguntas frecuentes de jQuery.
fuente
No puede usar un selector de id jQuery si el id contiene espacios. Use un selector de atributos:
Si es posible, especifique también el tipo de elemento:
fuente
Escápelo por Jquery:
ejemplo de uso:
Más información aquí .
fuente
El Release Candidate de ASP.NET MVC que se acaba de lanzar solucionó este problema, ahora reemplaza los puntos con guiones bajos para el atributo ID.
Renders a
Para obtener más información, vea las notas de la versión, comenzando en la página 14.
fuente
Esto está documentado en los documentos de jQuery Selectors :
En resumen, prefije el
.
con de la\\
siguiente manera:Por qué no
.
funciona en mi identificación?El problema es que
.
tiene un significado especial, la siguiente cadena se interpreta como un selector de clase. Entonces$('#Address.Country')
coincidiría<div id="Address" class="Country">
.Cuando se escapó como
\\.
, el punto se tratará como texto normal sin un significado especial, que coincida con la ID que desee<div id="Address.Country">
.Esto se aplica a todos los caracteres
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
que de otro modo tendrían un significado especial como selector en jQuery. Simplemente anteponga\\
para tratarlos como texto normal.¿Por qué 2
\\
?Como se señaló en la respuesta de bdukes, hay una razón por la que necesitamos 2
\
caracteres.\
escapará al siguiente carácter en JavaScript. Cuando JavaScript interprete la cadena"#Address\.Country"
, verá que\
, interpretarlo significa tomar el siguiente carácter literalmente y eliminarlo cuando se pasa la cadena como argumento a$()
. Eso significa que jQuery seguirá viendo la cadena como"#Address.Country"
.Ahí es donde
\
entra el segundo para jugar. El primero le dice a JavaScript que interprete el segundo como un carácter literal (no especial). Esto significa que jQuery verá el segundo y comprenderá que el siguiente.
carácter es un carácter literal.¡Uf! Tal vez podamos visualizar eso.
fuente
Usar dos barras invertidas está bien, es un trabajo. Pero si está utilizando un nombre dinámico, es decir, un nombre variable, deberá reemplazar los caracteres.
Si no desea cambiar los nombres de sus variables, puede hacer esto:
y que tienes tu objeto jquery.
fuente
Solo información adicional: consulte este problema ASP.NET MVC # 2403 .
Hasta que se solucione el problema, uso mis propios métodos de extensión como Html.TextBoxFixed, etc., que simplemente reemplaza los puntos con guiones bajos en el atributo id (no en el atributo de nombre), de modo que use jquery como $ ("# Address_Street") pero en el servidor, es como Address.Street.
El código de muestra sigue:
fuente
Resolví el problema con la solución dada por jquery docs
Mi funcion:
Nota: elimino el "#" porque en mi código concaté la ID con otro texto
Fuente: Jquery Docs selecciona un elemento con caracteres especiales
fuente