0

JavaScript でデバッグすると、$("#widgetIds").val() の値が [1,2,3,4] などの int 値の配列であることがわかります。コントローラーに到達すると、widgetIds リストは null になります。私が試してみました:

  • javascript で .serialize() と .serializeArray() を使用する
  • <string>コントローラーで widgetIds タイプをリストに変更する
  • コントローラーで widgetIds タイプを int[] に変更する
  • コントローラーで widgetIds タイプを string[] に変更する
  • 機能しなかった、または事態を悪化させた何時間もの微調整
  • グーグル
  • モニターに向かって怒鳴る
  • 拳を机に叩きつける
  • ビール

注: この複数選択コントロールを使用しています。optgroup の理由は、複数選択で分離するためです。

JavaScript

function ProcessButtonClick(){
$.post(processWidgetsUrl, { widgetIds: $("#widgetIds").val() });
}

意見

<select id="widgetIds" name="widgetIds" multiple="multiple">
    <optgroup label="Big Widgets">
        @foreach (var widget in Model.Widgets.Where(d => d.WidgetCategoryId == 1))
        {
            <option value="@widget.Id">@widget.DisplayName</option>
        }
     </optgroup>

     <optgroup label="Little Widgets">
         @foreach (var widget in Model.Widgets.Where(d => d.WidgetCategoryId == 3))
         {
             <option value="@widget.Id">@widget.DisplayName</option>
         }
     </optgroup>

     <optgroup label="Red Widgets">
         @foreach (var widget in Model.Widgets.Where(d => d.WidgetCategoryId == 4))
         {
             <option value="@widget.Id">@widget.DisplayName</option>
         }
     </optgroup>

     <optgroup label="Blue Widgets">
         @foreach (var widget in Model.Widgets.Where(d => d.WidgetCategoryId == 5))
         {
             <option value="@widget.Id">@widget.DisplayName</option>
         }
     </optgroup>

     <optgroup label="Round Widgets">
         @foreach (var widget in Model.Widgets.Where(d => d.WidgetCategoryId == 6))
         {
             <option value="@widget.Id">@widget.DisplayName</option>
         }
     </optgroup>

     <optgroup label="Square Widgets">
         @foreach (var widget in Model.Widgets.Where(d => d.WidgetCategoryId == 7))
         {
             <option value="@widget.Id">@widget.DisplayName</option>
         }
     </optgroup>
 </select>

コントローラ

public virtual ActionResult ProcessWidgets(List<int> widgetIds)
{
    return Json(_widgetComponent.DoStuff(widgetIds));
}
4

1 に答える 1

1

Json を送信していることをサーバーに伝える必要があります。ASP.NET MVC は、コントローラーに送信する前にデータを適切に解釈する方法を認識します。

function ProcessButtonClick(){
  $.post(processWidgetsUrl, { widgetIds: $("#widgetIds").val() }, null, "json");
}

配列を適切な JSON に変換する必要があるかもしれませんJSON、jQuery を使用して複雑なオブジェクトの配列を ASP.NET MVC コントローラーに投稿するにはどうすればよいですか?

于 2013-02-03T04:29:02.573 に答える