J'essaie de remplir un select lorsque l'onchange d'un autre select est appelé. Voici ce que j'ai construit. Mon point d'arrêt GetLine ActionResult est en cours d'exécution, mais le paramètre breweryCode est null. Les erreurs de méthode à ce point. Qu'est-ce que je rate?Ajax appel au contrôleur arrive vide dans MVC 4
Controller:
public ActionResult Index()
{
List<Brewery> breweries = BuildMockBrewery();
ViewBag.Breweries = new SelectList(breweries.AsEnumerable(), "BreweryCode", "BreweryDescription");
return View();
}
public ActionResult GetLine(string breweryCode)
{
List<PackagingLine> packagingLines = BuildMockLine(breweryCode);
SelectList pLine = new SelectList(breweryCode, "LineNumber", "Descriptions", 0);
return Json(pLine);
}
Index.cshtml:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script type="text/javascript">
function GetLine(_breweryCode) {
var url = '/Report/GetLine/';
$.ajax({
url: url,
data: { breweryCode: _breweryCode },
cache: false,
type: "POST",
success: function (data) {
alert('called');
var markup = '<option value="0">Select Line</options>';
for (var i = 0; i < data.length; i++) {
markup += '<option value="' + data[i].Value + '">' + data[i].Text + '</options';
}
$('#LineSelect').html(markup).show();
},
error: function (response) {
alert('fail' + ' ' + _breweryCode);
}
});
}
</script>
<div id="report-description">
@using (Html.BeginForm("Index", "Report", FormMethod.Post))
{
@Html.DropDownList("BreweryCode", (SelectList)ViewBag.Breweries, "Select Brewery", new { @class = "ui-select", @ID = "BrewerySelect", @onchange = "javascript:GetLine(this.Value);" })
<select class="ui-select" id="LineSelect" name="ReportSelect">
</select>
}
Vous attendez pour obtenir vos données from' appel Ajax' comme 'string' dans votre contrôleur, mais vous l'envoyer en tant que natif' JSON'. Je crois que changer un objet en tant que «chaîne» dans votre Ajax le résoudrait. –