別のselectのonchangeが呼び出されたときにselectを作成しようとしています。私が作ったのは以下の通りです。私のGetLine ActionResultブレークポイントがヒットしましたが、パラメータbreweryCodeはnullです。その時点でのメソッドのエラー私は何が欠けていますか?コントローラへのAjax呼び出しがMVC 4で空になりました
コントローラー:
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:あなたの@onchange
属性で
@{
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>
}
ように、コードの下に取るあなたのコントローラで 'STRING'としてAjax'コールfrom'あなたのデータを取得するために期待しているが、あなたはネイティブ' JSON'として送信します。あなたのAjaxでオブジェクトを 'string'として変更すると解決すると思います。 –