我有一个MVC 3项目,并坚持将视图绑定回Post上的模型。
这是我的模特:
public class DBViewModel
{
public ProductionDatabasesViewModel PDBViewModel { get; set; }
public IList<string> SelectedNames { get; set; }
public DBViewModel()
{
SelectedNames = new List<string>();
PDBViewModel = new ProductionDatabasesViewModel();
}
}
我的观点:(缩减版)
@model Web.Models.DBViewModel
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
@Html.ListBoxFor(x => x.SelectedNames, new SelectList(Model.SelectedNames))
<input id="button-submit" name="SubmitButton" type="submit" value="Submit" />
</fieldset>
}
Controller的片段:
[HttpPost]
public ActionResult Database(DBViewModel model)
{
var users = model.SelectedNames; //<---- empty, the count is 0 always.
}
在视图中,可以从自动填充框中选择用户,然后使用jQuery脚本将选定的名称添加到上面视图中的列表中。这一切都有效,所以我可以搜索用户,然后单击添加按钮将用户添加到列表中。但是单击“提交”按钮时遇到问题。在视图中添加的用户(视图中的选择列表)未绑定到模型。所以发布模型.SelectedNames为空。我也尝试了Request [“SelectedNames”]和Request.Form [“SelectedNames”],它们都是空的。
我在正常的网络表格方面非常有经验,但仍然在学习MVC,所以任何帮助都会非常感激。
[UPDATE]
我将在明天进一步更新问题,但如果我选择它们,则列表中的项目似乎将绑定到viewmodel。我明天会搞清楚这一点。但到目前为止,感谢所有评论,帮助和建议。
答案 0 :(得分:3)
这Does the Model Binder in ASP.NET MVC Beta Support List<T>?是否回答了您的问题?字符串列表是一个更简单的版本。
答案 1 :(得分:1)
不得不说这个截断版本的代码可以正常工作。提交后, SelectedNames 列表已从列表框中成功填写。你可以自己检查一下。虽然我做了一些改变:
public ActionResult Database()
{
return View(new DBViewModel { SelectedNames = { "a", "b", "c" } });
}
所以我相信你在其他地方都有一个错误,而不是在这些部分。
答案 2 :(得分:1)
好的,我找到了问题所在。如果html中有一个多选元素,要将框中的值绑定回模型,则必须先选择项目。非常讨厌,但这似乎是它想要的方式。
因此,如果您有一个选择框,如:
<select id="selected-ad-users-list" name="SelectedNames" multiple="multiple" size="5"
style="width: 100%">
</select>
你可以从任何地方添加项目,在我的情况下,我有另一个列表/或文本框,他们在其中键入了一个名称,然后我使用jQuery来填充这个选择列表。我需要做的是添加一些jQuery脚本来旋转我的列表并选择所有项目。因此,一旦选择了项目,它就会将它们绑定到模型。
以下是一篇很好的文章:select all or some items in a select box
我真的希望这有助于某人。