MVC多选不返回List <int> </int>

时间:2013-02-03 03:08:31

标签: c# javascript asp.net-mvc asp.net-mvc-3 c#-4.0

当我在javascript中调试时,我看到$(“#widgetIds”)的值.val()是一个int值的数组,如[1,2,3,4]。当它命中控制器时,widgetIds List为null。 我试过了:

  • 在javascript中使用.serialize()和.serializeArray()
  • 将widgetIds类型更改为控制器上的列表<string>
  • 将widgetIds类型更改为控制器上的int []
  • 将widgetIds类型更改为控制器上的字符串[]
  • 小时调整不起作用或使事情变得更糟
  • 谷歌
  • 对我的显示器大喊大叫
  • 把拳头砸在我的桌子上
  • 啤酒

注意:我正在使用此multiselect控件。 optgroups的原因是多选中的分离。

的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));
}

1 个答案:

答案 0 :(得分:1)

您需要告诉服务器您正在向它发送Json,然后ASP.NET MVC将知道如何在将数据发送到控制器之前正确解释数据:

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

您可能需要将数组转换为正确的JSON How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller?