1
votes

Entrée du contrôleur .NET Core toujours nulle d'AJAX

Ceci est mon contrôleur. J'ai un problème où je ne sais pas pourquoi ma chaîne d'entrée est toujours nulle. J'espère que quelqu'un pourra y jeter un œil et voir quelle est mon erreur.

[HttpPost]
public JsonResult GetAllByName([FromBody]string Input)
{
  JsonResult result = new JsonResult(null);
  result = this.Json(new
  {
      list = accountCodeData.GetAllByName(Input),
  });
  return result;
}
var Name;
$("#AccountCodeName").change(function() {
  Name = $("#AccountCodeName").val();
});

var form_data = {
  "Input": Name,
};

$("#AccountCodeName").autocomplete({
  source: function(request, response) {
    $.ajax({
      url: "/Configuration/AccountCodes/GetAllByName",
      method: "POST",
      data: form_data,
      contentType: "application/json",
      success: function(result) {
        console.log(result)
      }
    });
  }
});


6 commentaires

Le nom n'est initialisé nulle part?


Désolé, je viens de l'ajouter.


Essayez sans [FromBody]


J'ai essayé cela aussi.


Quel plugin utilisez-vous pour .autocomplete ?


Saisie semi-automatique de Jquery


3 Réponses :


1
votes

Le problème est que vous ne définissez le form_data.Name que lorsque la page se charge. Il n'est jamais mis à jour. Notez que ce n'est pas une valeur de référence.

Pour résoudre les problèmes, vous devez plutôt créer l'objet que vous fournissez aux données juste avant d'envoyer la requête AJAX, comme ceci:

$("#AccountCodeName").autocomplete({
  source: function(request, response) {
    $.ajax({
      url: "/Configuration/AccountCodes/GetAllByName",
      method: "POST",
      data: { 
        Input: $("#AccountCodeName").val()
      },
      contentType: "application/json",
      success: function(result) {
        console.log(result);
        // note that you need to call 'response()' here providing the received data
      }
    });
  }
});

p>


4 commentaires

Si vous mettez console.log ($ ("# AccountCodeName"). Val ()); dans la fonction de gestionnaire source , qu'obtenez-vous?


Je peux obtenir la valeur AccountCodeNames si j'y place un console.log. D'une manière ou d'une autre, il n'est pas envoyé à mon contrôleur


Essayez data: JSON.stringify ({Input: $ ("# AccountCodeName"). Val ()}),


Toujours nul. Je l'ai essayé avec [FromBody] et sans [FromBody]. Les deux avaient nul



0
votes

J'ai enfin trouvé une réponse

C'est comme ça que c'est censé être pour la saisie semi-automatique

Contrôleur

 $("#AccountCodeName").autocomplete({
        source: function (request, response) {
            console.log($("#AccountCodeName").val())
            console.log(request.term)
            $.ajax({
                url: "/Configuration/AccountCodes/GetAllByName",
                method: "POST",
                data: request,
                dataType: 'json',
                success: function (result) {
                    console.log(result)
            }
        });
        }
    });

Jquery

    [HttpPost]
    public ActionResult GetAllByName(string term)
    {
        JsonResult result = new JsonResult(null);
        result = this.Json(new
        {
            list = accountCodeData.GetAllByName(term),
        });
        return result;
    }


0 commentaires

0
votes

J'utilise jquery post avec les méthodes de post-action de base .net pour les modèles même

Voici un extrait de code qui peut vous aider

jquery

[HttpPost, Route("controller/action")]
public async Task<IActionResult> action(string Name)
{

}

.net core back-end

$.ajax({
    type: "POST",
    url: '/controller/action',
    data: { Name: $('#name').val()},
    success: function (response) {
        window.location.href = '/';
    }
});


0 commentaires