如何解决MVC:将动态选择列表绑定回Post上的ViewModel
|| 我有一个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>
}
控制器片段:
[HttpPost]
public ActionResult Database(DBViewModel model)
{
var users = model.SelectedNames; //<---- empty,the count is 0 always.
}
在视图中,可以从自动完成框中选择用户,然后从jQuery脚本中将所选名称添加到上方视图中的列表中。所有这些工作正常,因此我可以搜索用户,然后单击“添加”按钮以将用户添加到列表中。但是单击“提交”按钮时遇到问题。在视图(视图中的选择列表)中添加的用户未绑定到模型。所以在发布时model.SelectedNames为空。我也尝试了Request [\“ SelectedNames \”]和Request.Form [\“ SelectedNames \”],它们都是空的。
我对普通的Web表单非常有经验,但是仍在学习MVC,因此我们将不胜感激。
[更新]
明天我会再更新这个问题,但是如果我选择了列表中的项目,看来该项目将绑定到该视图模型。明天我会弄清楚的。但到目前为止,非常感谢您提供的所有意见,帮助和建议。
解决方法
ASP.NET MVC Beta中的Model Binder是否支持List ?回答您的问题?字符串列表是一个简单的版本。
,不得不说,此代码的截断版本可以正常工作。提交后,成功从列表框中填充了SelectedNames列表。您可以自己检查。尽管我进行了一些更改:
删除了对ProductionDatabasesViewModel的所有引用;
将数据库方法的POST版本的返回类型更改为void;
添加了GET版本的Database方法
:
public ActionResult Database()
{
return View(new DBViewModel { SelectedNames = { \"a\",\"b\",\"c\" } });
}
因此,我相信您还有其他地方的错误,而不是这些部分。
,好的,我发现了问题所在。当您的html中有一个multi select元素想要将框中的值绑定回模型时,您必须首先选择项目。非常烦人,但这就是它想要的方式。
因此,如果您有一个选择框,例如:
<select id=\"selected-ad-users-list\" name=\"SelectedNames\" multiple=\"multiple\" size=\"5\"
style=\"width: 100%\">
</select>
然后,您可以从任何地方向其中添加项目,以我为例,他们在其中键入了名称的另一个列表/文本框中,然后使用jQuery填充了此选择列表。我需要做的是添加一些jQuery脚本来旋转我的列表并选择所有项目。因此,一旦选择了项目,它将把它们绑定到模型。
这是一篇很好的文章:在选择框中选择全部或部分项目
我真的希望这对某人有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。