这是一个多模型视图,我通过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很新)!
答案 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