![](/img/trans.png)
[英]why when I don't use ConfigureHttps, TempData is null in asp.net core 2.1 MVC?
[英]ASP.NET MVC5. I don't know why my form returns null viewmodel object
我需要选中所需的复选框以了解是否需要将音频添加到播放列表。 我看到包含所有音频和复选框列表的视图,但是提交后,该表单什么也不返回,我也不知道为什么!
所以这是我的ViewModel代码:
public class AddToPlaylist
{
public Audio Audio { get; set; }
public bool IsSelected { get; set; } = false;
}
控制器:
public ActionResult Add()
{
var item = new List<AddToPlaylist>();
foreach (var a in db.Audios)
{
var cur = new AddToPlaylist();
cur.Audio = a;
item.Add(cur);
}
return View(item);
}
[HttpPost]
public ActionResult Add(List<AddToPlaylist> playLists)
{
return View(playLists);
}
并查看:
@using AudioList.ViewModels
@model List<AddToPlaylist>
<h1>Adding audios...</h1>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<table class="table table-striped">
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Audio.Band.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Audio.Title)
</td>
<td>
@Html.CheckBoxFor(modelItem => item.IsSelected)
</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
尝试用for
循环替换您的foreach
循环:
@for (var i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.DisplayFor(x => x[i].Audio.Band.Name)
</td>
<td>
@Html.DisplayFor(x => x[i].Audio.Title)
</td>
<td>
@Html.CheckBoxFor(x => x[i].IsSelected)
</td>
</tr>
}
还要注意,由于您仅显示Audio.Band.Name
和Audio.Title
属性,并且Audio.Title
没有相应的input
字段,因此您永远不会在回发时检索它们的值。 您将仅检索选定的复选框值。 如果还想绑定这些值,则可以考虑将它们包括为隐藏字段:
@Html.HiddenFor(x => x[i].Audio.Band.Name)
@Html.HiddenFor(x => x[i].Audio.Title)
有关将模型绑定到列表的更多信息,建议您阅读following blog post
,该following blog post
详细解释了应如何命名输入字段,以便ASP.NET MVC模型绑定器能够在回发时检索值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.