【问题标题】:MVC multi select not returning List<int>MVC 多选不返回 List<int>
【发布时间】:2013-02-03 03:08:30
【问题描述】:

当我在 javascript 中调试时,我看到 $("#widgetIds").val() 的值是一个 int 值数组,例如 [1,2,3,4]。当它到达控制器时,widgetIds 列表为空。 我试过了:

  • 在 javascript 中使用 .serialize() 和 .serializeArray()
  • 在控制器上将 widgetIds 类型更改为 List&lt;string&gt;
  • 在控制器上将 widgetIds 类型更改为 int[]
  • 在控制器上将 widgetIds 类型更改为 string[]
  • 几个小时的小调整没有奏效或让事情变得更糟
  • 谷歌
  • 对着我的显示器大喊大叫
  • 用拳头猛击我的桌子
  • 啤酒

注意:我正在使用这个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));
}

【问题讨论】:

    标签: c# javascript asp.net-mvc asp.net-mvc-3 c#-4.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?

    【讨论】:

    • 谢谢!添加 json 对我不起作用。我会查看那篇文章,让你知道它是否有效。
    猜你喜欢
    • 2011-07-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多