2017-03-04 23 views
0

フォームがすでにコントローラに渡されている他のパラメータにajax結果からの値を追加する必要があります。 このパラメータフォームとコントローラは別として、まったく同じように動作します。Html.Hidden値がViewからControllerへと失われました

これはコントローラ

[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を埋めるために使用され、他のパラメータはコントローラに渡されます。彼らはすべてうまくいっています。また、期待どおりに動作and`it

$('#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.'); 
       } 
      }); 
     }) 

特別なものは何もありませんアヤックス結果が渡され

@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に(つまりは考えです):結果を警告すると、データの値が表示され、生成された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整数配列ですか?代わりにstringを使用してみてください。 –

答えて

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

関連する問題