2016-05-17 2 views
1

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

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. –

Répondre

1

Dans votre attribut @onchange, changer this.Value-this.value

Essayez d'ajouter

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

donc GetLine peut être en mesure de traiter POST demande

+0

Bon appel, mais cela n'a pas fonctionné. breweryCode est toujours null lorsqu'il est appelé. –

+0

@ todd.pund Dans votre attribut cshtml '@ onchange', pourriez-vous essayer de changer' this.Value' en 'this.value' –

+0

Cela a fait l'affaire. Merci beaucoup Z! –

0

S'il vous plaît ajouter datatype ainsi:

dataType: 'html' ou dataType: 'json'

et ajoutez http métho d dans un contrôleur

[HttpPost] 
public ActionResult GetLine(string breweryCode) 
{ 

} 

aussi, assurez-vous que la valeur _breweryCode arrive en dessous de la fonction

function GetLine(_breweryCode) 
{ 
} 

Prenez le code ci-dessous comme exemple

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