如何动态渲染多模型CREATE表单?

时间:2010-07-09 03:28:50

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

这是一个多模型视图,我通过IList<Book>实现了这一目标。每本书都有一个标题和一个作者

例如,如果我想制作3本书:

<%= Html.TextBoxFor(m => m[0].Title) %>
<%= Html.TextBoxFor(m => m[0].Author) %>

<%= Html.TextBoxFor(m => m[1].Title) %>
<%= Html.TextBoxFor(m => m[1].Author) %>

<%= Html.TextBoxFor(m => m[2].Title) %>
<%= Html.TextBoxFor(m => m[2].Author) %>

等等。

但是,我希望能够为任意数量的图书生成这样的表格。我之前在Ruby on Rails中通过JavaScript和渲染部分来完成了这个,但我认为在这种情况下我不能渲染部分因为表单发生了变化(书的索引必须增加才能使它工作)

编辑:我正在寻找一种在创建视图中执行此操作的方法。所以在这种情况下,我没有书籍清单,但我正在建立它。

用户应该可以点击“添加其他项目”的链接,并将另一本书的表格添加到底部。

有什么想法吗?一些示例代码非常有用(我对ASP.NET很新)!

3 个答案:

答案 0 :(得分:1)

Editor templates是实现这一目标的好方法:

型号:

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

控制器:

public ActionResult Index()
{
    // Fetch the books from your repository:
    var books = new[]
    {
        new Book { Title = "title 1", Author = "author 1" },
        new Book { Title = "title 2", Author = "author 2" },
    };
    return View(books);
}

查看~/Views/Home/Index.aspx(强烈输入IEnumerable<Book>):

<%= Html.EditorForModel() %>

编辑器模板~/Views/Shared/EditorTemplates/Book.ascx(强烈输入Book):

<%= Html.TextBoxFor(x => x.Title) %>
<%= Html.TextBoxFor(x => x.Author) %>

答案 1 :(得分:0)

这样的事情应该这样做:

<%
foreach (var book in Model)
{
    %>
    <p>Title: <%= Html.TextBoxFor(book.Title) %></p>
    <p>Author: <%= Html.TextBoxFor(book.Author) %></p>
    <%
}
%>

您可以在<% %>块内的视图中使用大多数C#代码。

答案 2 :(得分:0)

将视图发送到视图并使用foreach循环。
http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

编辑:

我昨天回答了类似的问题。这是Web窗体,但它也应该在MVC中工作

Programmatically add controls to form