我正在努力从我在两个组之间进行排序的表单的帖子中获取数据。表格看起来像这样。 正如你所看到的,get动作效果很好,整个页面工作得很好..这是.cshtml视图
@model InfoKeeper.Models.GroupManageVewModel
@{
ViewBag.Title = "ManageGroup";
}
<h2>ManageGroup</h2>
@using (Html.BeginForm("ManageGroup","GroupManager", FormMethod.Post))
{
<div class="nav-block">
<div class="row">
<div class="col-xs-3 col-xs-pull-1 col-xs-offset-2">
<p>Available Groups</p>
@Html.HiddenFor(m => m.GroupID)
@Html.HiddenFor(m => m.CustomerID)
@Html.ListBoxFor(m => m.ResultAvailable, Model.AvailableDepartmentsSL, new { @Name = "from[]", @id = "multiselect", @class = "form-control", @size = "8", @multiple = "multiple", @style = "min-width: 350px;margin-right:50px;" })
</div>
<div class="col-xs-2" style="padding-top:25px;">
<button type="button" id="multiselect_rightAll" class="btn btn-block"><i class="glyphicon glyphicon-forward"></i></button>
<button type="button" id="multiselect_rightSelected" class="btn btn-block"><i class="glyphicon glyphicon-chevron-right"></i></button>
<button type="button" id="multiselect_leftSelected" class="btn btn-block"><i class="glyphicon glyphicon-chevron-left"></i></button>
<button type="button" id="multiselect_leftAll" class="btn btn-block"><i class="glyphicon glyphicon-backward"></i></button>
<input type="submit" value="save" class="btn btn-block btn-success">
</div>
<div class="col-xs-3">
<p>Departments in Group</p>
@Html.ListBoxFor(m => m.ResultInGroup, Model.DepartmentsInGroupSL, new { @Name = "to[]", @id = "multiselect_to", @class = "form-control", @size = "8", @multiple = "multiple", @style = "min-width: 350px" })
</div>
</div>
</div>
}
此外,这是控制器......
public ActionResult ManageGroup(int GroupID, int CustomerID)
{
GroupRepo repo = new GroupRepo();
var model = repo.ManageGroup(GroupID, CustomerID);
model.AvailableDepartmentsSL = new MultiSelectList(model.AvailableDepartments, "Key", "Value");
model.DepartmentsInGroupSL = new MultiSelectList(model.DepartmentsInGroup, "Key", "Value");
return View(model);
}
和模型......
public class GroupManageVewModel
{
public MultiSelectList AvailableDepartmentsSL { get; set; }
public MultiSelectList DepartmentsInGroupSL { get; set; }
public Dictionary<int, string> DepartmentsInGroup { get; set; }
public Dictionary<int, string> AvailableDepartments { get; set; }
public int GroupID { get; set; }
public int CustomerID { get; set; }
public string GroupName { get; set; }
public IEnumerable<int> ResultAvailable { get; set; }
public IEnumerable<int> ResultInGroup { get; set; }
}
但是当我提交表格时...这就是我在Post上得到的......
因此,表单是发布某些内容 ... HiddenFors。但是出于什么原因我的ResultAvailable和ResultInGroup为空...请帮忙!
答案 0 :(得分:0)
您需要将List<int>
用于ResultInGroup
媒体资源。模型绑定器无法绑定到IEnumerable
,因为它不支持索引。
答案 1 :(得分:0)
好的,我现在得到了理想的结果。答案在于克里斯普拉特让我上场的一些想法......
好!因此,当表单提交每个选项中的选项元素时,确实会被选中。执行该操作的代码位于源代码中。它必须是别的...我认为它与SelectList的名称有关...为了使插件工作,我必须将选择列表的名称更改为“from []”并且“到[]”它必须与此有关......当在MVC中我相信它们通常被命名为它们必须的道具...将报告回来
我100%正确(我永远不会这么说。)
当我将这个表单放在一起并使插件正常工作时,我最初从我的视图中的文档中获得了代码看起来像......
<select name="from[]" id="multiselect" class="form-control" size="8" multiple="multiple">
<option value="1">Item 1</option>
<option value="2">Item 5</option>
<option value="2">Item 2</option>
<option value="2">Item 4</option>
<option value="3">Item 3</option>
</select>
而不是这样我决定使用MVC为您提供的HtmlHelpers,以便我可以提交此表单并将所有数据准确地放在我想要的位置,而不必构建WebApi控制器并捕获所有表单数据jQuery ...当这样做虽然插件的功能不起作用,这是因为我试图使用HtmlHelper Html.ListBoxFor这样
@Html.ListBoxFor(m => m.ResultAvailable, Model.AvailableDepartmentsSL, new { @name = "from[]", @id = "multiselect", @class = "form-control", @size = "8", @multiple = "multiple", @style = "min-width: 350px;margin-right:50px;" })
但是当我在开发工具中打开页面时,name属性未设置为“from []”,它被设置为“ResultAvailable”经过一些阅读后我发现我可以将name属性设置为“from [] “通过改变
@name = "from[]"
到
@Name = "from[]"
是的,它区分大小写!在此之后控制工作,但后来我遇到了创建这个问题的问题。帖子回来时带有空位...所以经过一些思考后我想到了男人,我想知道如果我只是注释掉了name属性会发生什么,这意味着控件不会像过去一样工作,并从那里点击提交。 ..令我惊讶的是,它奏效了。我是正确的MVC需要ListBox的名称不被更改,因为它给它做我想要它做的所需的名称...所以,自然现在插件不起作用,对吧? 错误!
有效。我不知道为什么......
我应该说我的解决方案让我感到不安......但它仍然是一个解决方案。谢谢你的帮助。