2016-05-17 14 views
1

別の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> 
    } 
+0

ように、コードの下に取るあなたのコントローラで 'STRING'としてAjax'コールfrom'あなたのデータを取得するために期待しているが、あなたはネイティブ' JSON'として送信します。あなたのAjaxでオブジェクトを 'string'として変更すると解決すると思います。 –

答えて

1

this.Value

[HttpPost] 
public ActionResult GetLine(string breweryCode) 
{ 
    List<PackagingLine> packagingLines = BuildMockLine(breweryCode); 
    SelectList pLine = new SelectList(breweryCode, "LineNumber", "Descriptions", 0); 
    return Json(pLine); 
} 
を追加してみ

this.valueにを変更0

のでGetLinePOST要求

+0

いいですが、うまくいかなかった。 breweryCodeは、呼び出されるとまだnullです。 –

+0

@ todd.pundあなたのcshtmlの '@ onchange'属性で、' this.Value'を 'this.value'に変更しようとしてください。 –

+0

それはそのトリックでした。ありがとうZ! –

0

を処理することができることができ、同様のデータ型を追加してください:

データ型: 'HTML'、またはデータ型: 'JSON'

とでのhttpメトに Dを追加コントローラも

[HttpPost] 
public ActionResult GetLine(string breweryCode) 
{ 

} 

、価値_breweryCodeが機能

の下で来ているかどうかを確認してください10
function GetLine(_breweryCode) 
{ 
} 

はサンプル

$.ajax({ 
    type: "POST", 
    url: your url, 
    dataType: 'json', 
    data: JSON.stringify({ id: '2' }), 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     alert('hello'); 
    } 
}); 
関連する問題