2017-03-04 25 views
0

我需要將來自ajax結果的值添加到表單已傳遞給控制器​​的其他參數。 除了這個參數形式和控制器完全按照預期工作。Html.Hidden值從查看到控制器丟失

這是控制器

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

導致問題的參數是 'INT [] geoDataID'。 爲了將它從ajax.result傳遞到控制器,正在使用隱藏字段。此外,由於此值必須隨後傳遞到另一個視圖,我正在使用ViewBag將其值從控制器傳回。 下面是表單:Html.Action和輸入用於填充其他DDL並將其他參數傳遞給控制器​​。他們所有的工作都很好。

@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> 
      } 

阿賈克斯結果傳遞(這將是想法)到

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

的jquery.ajax也沒什麼特別

$('#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按預期工作:當我提醒結果時,我可以看到數據值,當我查看生成的html輸出時,隱藏字段已填充數據。 從

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

到,作爲一個例子

<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" /> 

其實所有的問題,但這個參數獲取到控制器的形式提交,我想不出有什麼遺漏。

+0

是geoDataId一個整數數組嗎?嘗試使用字符串。 –

回答

2

這個錯誤可能是因爲你的函數期望得到一個int數組並且得到一個逗號分隔的字符串。

嘗試使用

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

,然後用逗號分隔的字符串轉換爲字符串數組像這樣:

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

然後INT解析它們中的每以將其轉換成一個整數數組。

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

希望這有助於!

+1

你是對的隊友!不幸的是,將逗號分隔的字符串轉換爲整數數組並不那麼簡單,但我認爲它可以解決。謝謝! – Luke

+0

最新的問題?如果你更新了這個問題,人們會幫你輕鬆! –

+0

如果不轉換每個項目,則無法將字符串轉換爲int []。嘗試一下。 – Luke