当我在 javascript 中调试时,我看到 $("#widgetIds").val() 的值是一个 int 值数组,例如 [1,2,3,4]。当它到达控制器时,widgetIds 列表为空。我努力了:
- 在 javascript 中使用 .serialize() 和 .serializeArray()
- 将 widgetIds 类型更改为
<string>
控制器上的 List - 在控制器上将 widgetIds 类型更改为 int[]
- 在控制器上将 widgetIds 类型更改为 string[]
- 几个小时的小调整没有奏效或让事情变得更糟
- 谷歌
- 对着我的显示器大喊大叫
- 把我的拳头砸在我的桌子上
- 啤酒
注意:我正在使用这个多选控件。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));
}