He creado una vista y un controlador, el controlador que quiero devolver algunos resultados de búsqueda. Estoy llamando al controlador usando jQueryPasar un parámetro a un controlador usando jquery ajax
<input type="text" id="caption" />
<a href="#" id="search">Search</a>
<script>
$("#search").click(function() {
alert('called');
var p = { Data: $('#search').val() };
$.ajax({
url: '/Ingredients/Search',
type: "POST",
data: JSON.stringify(p),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
alert(data);
},
error: function() {
alert("error");
}
});
});
Mi controlador tiene este aspecto
[HttpPost]
public ActionResult Search(string input)
{
var result = _db.Ingredients.Where(i => i.IngredientName == input);
return new JsonResult() {Data = new {name="Hello There"}};
}
Mi problema es que no estoy seguro de cómo obtener la varible de mi llamada jQuery en el controlador, he puesto una punto de interrupción en el controlador y su golpe, sin embargo, la cadena de entrada siempre es nula.
¿Qué he hecho mal?
Correcto. Para explicar: si su variable en C# y el campo utilizado en el elemento JSON que está pasando tienen el mismo nombre, se enlazarán automáticamente entre sí. Entonces, si cambiara la propiedad JSON a '{captionvalue: $ ('# caption'). Val()}', también debería cambiar el nombre de la variable en su función a 'captionvalue'. Solo una explicación para que entiendas por qué funciona esto :-) – Flater