如何将list <object>绑定到模型并与其他表单数据一起提交?

时间:2018-11-29 10:34:47

标签: c# asp.net-mvc model-binding

这就是我想要做的:

我有一个带有一些输入字段的表格。表单的一部分允许用户选择多个选项(书籍),但不知道有多少。

型号:

public class Data
{
    public string name { get; set; }
    public string age { get; set; }
    ...
    public List<Books> books { get; set; }
    ...
}

然后

public class Books
{
    public string Title { get; set; }
    public string Author { get; set; }
}

查看:

@model Applicants.Models.Data
...
<input type="text" name="Title" value="" />
<input type="text" name="Author" value="" />

我的问题是,我如何提交多个标题和作者以及其他表单数据?以及如何正确命名输入字段?

我已经读过这个https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

但是该示例仅提交了一个列表,没有其他数据。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以为普通html语法的绑定模型执行此操作,这只是示例  您需要根据需要进行修改

<input type="text" name="Model.name" value="Curious George" />
<input type="text" name="Model.age" value="H.A. Rey" />

<input type="text" name="Model.books[0].Title" value="Curious George" />
<input type="text" name="Model.books[0].Author" value="H.A. Rey" />    

答案 1 :(得分:0)

由于使用的是Razor视图,因此可以使用强类型的@Html.TextBoxFor()助手,并可以使用for循环在books列表内生成多个文本框:

@model Applicants.Models.Data

@using (Html.BeginForm())
{
    @Html.TextBoxFor(model => model.name)
    @Html.TextBoxFor(model => model.age)

    @for (int i = 0; i < Model.books.Count; i++)
    {
        @Html.TextBoxFor(model => model.books[i].Title)
        @Html.TextBoxFor(model => model.books[i].Author)
    }

    @* don't forget to add submit button here *@
}

假设您具有POST操作,且该操作具有<input>作为viewmodel参数,则循环将生成以下示例,例如以下示例:

Applicants.Models.Data

有关工作示例,请参见this fiddle