创建包含对象列表的模型

时间:2014-05-16 18:19:43

标签: c# asp.net-mvc asp.net-mvc-3

鉴于以下情况:

我有一个包含各种属性的模型,其中一个属性是List。 该模型如下:

public class DocumentTypeViewModel : BaseViewModel<int>
{
    #region Properties

    public string Name { get; set; }

    public List<DocumentTypeProperty> Properties { get; set; } 

    #endregion Properties
}

DocumentTypeProperty只有一个带有名字的字段(当然还有一个id,但这里并不重要)。

现在,ActionResult显示创建将发生的视图如下:

public ActionResult Create()
{
    var model = Mapper.Map<DocumentType, DocumentTypeViewModel>(new DocumentType());
    return View(model);
}

因此,如您所见,我将一个空模型发送到视图,因此该集合为null。 现在,在我的Razor视图中,我想要一个添加按钮,我可以使用它来添加元素到集合(我知道我可以使用jQuery创建元素),但我不想发布它自它不需要,该帖子将在模型保存时发生。

所以问题是:

如何将我动态创建的文本框传递给我的ActionResult?

亲切的问候,

2 个答案:

答案 0 :(得分:2)

MVC中的模型绑定将绑定到集合

@Html.TextBoxFor(model => model[0].Name)
@Html.TextBoxFor(model => model[1].Name)

那么你的控制器可能是

public ActionResult Create(List<DocumentTypeViewModel> )

然后,您可以在提交表单时立即创建所有行。

如果要将每行保存到数据库中,因为它已添加到表单中,那么您需要执行一些AJAX。

此外,无需在视图中放置DateCreated和DateUpdated。如果你这样做,那么一个精明的用户就可以编辑它们。只需让控制器在保存之前添加它们。

答案 1 :(得分:1)

如果你想在视图中显示IEnumerable /列表,你可以使用forech loop。你可以通过viewbag或modelbinding从你的控制器发送列表。这样的东西

在控制器

   public ActionResult Create()
   {
    var model = Mapper.Map<DocumentType, DocumentTypeViewModel>(new DocumentType());
    Viewbag.List=Userlist// bind your list here
    return View(model);
   }

在视图中

只需使用表格和forech循环来表示列表数据

     @foreach (var item in @Viewbag.List) 
    {
    //Define your table structure
    } 

我不清楚你在添加数据的第二步说了些什么。我先说清楚。 感谢