ASP.NET MVC5。我不知道为什么我的表单返回null viewmodel对象

时间:2016-02-27 11:56:59

标签: c# asp.net

我需要检查所需的复选框,以确定是否需要将音频添加到播放列表。我看到包含所有音频和复选框列表的视图,但在提交后,表单什么也没有返回,我不知道为什么会这样!

所以这是我的ViewModel代码:

@IBOutlet var myButton: UIButton!

@IBAction func myButton(sender: AnyObject) 
{
    myButton.backgroundColor = UIColor(red: 0.1, green: 0, blue: 0, alpha: 0.1)
    myButton.titleLabel?.text = "4"
}

控制器:

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);
    }

1 个答案:

答案 0 :(得分:0)

尝试使用foreach循环替换for循环:

@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.NameAudio.Title属性,并且表单中没有相应的input字段,因此您永远无法检索其值回发。您只会检索所选的复选框值。如果您想要绑定这些值,您可以考虑将它们包含在隐藏字段中:

@Html.HiddenFor(x => x[i].Audio.Band.Name)
@Html.HiddenFor(x => x[i].Audio.Title)

有关模型绑定到列表的更多信息,我建议您阅读following blog post,其中详细说明了如何命名输入字段,以便ASP.NET MVC模型绑定器能够检索值回发。