2017-03-04 1 views
0

Ich muss einen Wert von einem Ajax-Ergebnis zu anderen Parametern hinzufügen das Formular bereits an den Controller übergeben. Abgesehen von diesem Parameter arbeiten Form und Controller genau wie erwartet.Html.Hidden Wert von Ansicht zu Controller verloren

Dies ist der Controller

[HttpGet] 
public async Task<ActionResult> Search(int? page, int? selectedCategoryID, int[] geoDataID = null, string searchString = "", string sortBy = "") 

Die Parameter Probleme ist 'int [] geoDataID' verursacht. Um es von ajax.result an den Controller zu übergeben, wird ein verstecktes Feld verwendet. Da dieser Wert anschließend an eine andere Ansicht übergeben werden muss, verwende ich den ViewBag, um den Wert vom Controller zurück zu geben. Hier ist das Formular: Html.Action und die Eingabe wurden verwendet, um andere DDL zu füllen und die anderen Parameter an den Controller zu übergeben. All die funktionieren gut.

@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { @class = "navbar-form navbar-left" })) 
      { 
       @Html.Action("GetCategoryList", "Categories") 
       <div class="form-group"> 
        <input id="searchString" name="searchString" type="text" class="form-control" placeholder="search string" onfocus="this.value=''" /> 
       </div> 
       @Html.Action("GetRangeIput", "GeoData") 
       @Html.Hidden("geoDataID", (object)ViewBag.geoDataID, new { id = "geoDataID" }) 
       <button type="submit" class="btn btn-default">Search</button> 
      } 

Das Ajax-Ergebnis übergeben wird (das wäre die Idee) an die

@Html.Hidden("geoDataID", (object)ViewBag.geoDataID, new { id = "geoDataID" }) 

Die jQuery.ajax auch nichts Besonderes ist

$('#selectedRangeID').change(function() { 
      var rangeSelected = $(this).val(); 
      $.ajax({ 
       url: '@Url.Action("getGeoDataInRangeID", "Manage")', 
       datatype: "json", 
       type: "GET", 
       data: { 
        range: rangeSelected * 5000, 
        latitude: LATITUDE, 
        longitude: LONGITUDE 
       }, 
       success: function (data) { 
        $('#geoDataID').val(data); 
       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        alert('Failed to retrieve range geodata.'); 
       } 
      }); 
     }) 

and`it wie erwartet funktioniert: Wenn ich das Ergebnis alarmiere, kann ich den Datenwert sehen und wenn ich die erzeugte HTML Ausgabe ansehe, wurde das versteckte Feld mit Daten gefüllt. von

<input id="geoDataID" name="geoDataID" type="hidden" value="" /> 

zu, als Beispiel

<input class="input-validation-error" id="geoDataID" name="geoDataID" type="hidden" value="3440,3442,3444,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3468,3469,3470,3473,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3577,3579,3592,3593,3610,3616,3617" /> 

Wie in der Tat alle, aber diese Parameter an die Steuerung erhalten, wie das Formular abgeschickt wird, und ich kann nicht herausfinden, was fehlt ist.

+0

ist geoDataId ein Integer-Array? Versuchen Sie stattdessen, die Zeichenfolge zu verwenden. –

Antwort

2

Dieser Fehler liegt wahrscheinlich daran, dass Ihre Funktion ein int-Array erwartet und stattdessen eine durch Kommas getrennte Zeichenfolge erhält.

versuchen

[HttpGet] 
public async Task<ActionResult> Search(int? page, int? selectedCategoryID, string geoDataID = null, string searchString = "", string sortBy = "") 

verwenden und dann wandeln die durch Kommata getrennte Zeichenkette in eine Zeichenkette Array wie folgt:

var strGeoDataId = geoDataID.split(',');

und dann int parsen jeder von ihnen in einen Integer Array zu konvertieren, .

var intGeoDataId = Array.ConvertAll(strGeoDataId, int.Parse);

hoffe, das hilft!

+1

Sie hatten Recht, Kumpel! Leider ist es nicht so einfach, eine durch Kommas getrennte Zeichenkette in ein Ganzzahl-Array umzuwandeln, aber ich nehme an, dass es ausgearbeitet werden kann. Vielen Dank! – Luke

+0

Was ist das Problem? Wenn du die Frage aktualisierst, würden die Leute dir helfen, es einfacher zu machen! –

+0

Sie können Zeichenfolgen nicht in ein int [] konvertieren, ohne jedes Element zu übertragen. Versuch es. – Luke

Verwandte Themen