【问题标题】:How to bind list<object> to a model and submit along with other form data?如何将 list<object> 绑定到模型并与其他表单数据一起提交?
【发布时间】:2018-11-29 10:34:46
【问题描述】:

这就是我想要做的:

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

型号:

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/

但是示例只提交了一个List,没有和其他数据一起提交。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    由于您使用的是 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 *@
    }
    

    循环将产生&lt;input&gt; 元素,如下例所示,假设您有 POST 操作,其中 Applicants.Models.Data 作为视图模型参数:

    <input name="books[0].Title" type="text" value="sometitle">
    <input name="books[0].Author" type="text" value="somevalue">
    
    <input name="books[1].Title" type="text" value="sometitle">
    <input name="books[1].Author" type="text" value="somevalue">
    
    <!-- other input elements depending on books list count -->
    

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

    【讨论】:

      【解决方案2】:

      对于普通 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" />    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-09
        • 2012-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-02
        • 1970-01-01
        相关资源
        最近更新 更多