2011-07-26 75 views
0

我有一个包含对象集合的MVC模型对象。我想将MVC模型公开为MVC视图上的用户输入字段。如何在MVC模型中展示MVC视图(* .cshtml)的项目集合ASP.NET MVC

下面是MVC模式和域模型

public class BookModel 
    { 
     public BookModel(Book book) 
     { 
      this.Authors = book.Authors; 
     } 

     public List<Author> Authors { get; set; } 
    } 

    public class Book 
    { 
     public List<Author> Authors = new List<Author>(); 
    } 

    public class Author 
    { 
     public string Name { get; set; } 
    } 

下面是在控制器的动作方法:

public ActionResult Edit(int id) 
     { 

      BookModel model = GetBookModel(id); 
      return View(model); 
     } 

的问题是,所生成的视图(* .cshtml)不具有集合作者的输入字段。

任何想法将非常感激。

+0

你需要一个下拉选择一个作者,或者你需要像一个复选框列表吗? –

+0

你可以粘贴你的视图的代码?如果您使用脚手架,它可能不一定会为您生成此代码...您必须自己创建该代码。你究竟想要它看起来如何?你想显示一张表,一个无序的列表等? – Dismissile

+0

谢谢。它是一个编辑视图,因此它可以是一个表格,一个作者只有一行。每行都有一个名称标签和用于编辑的名称文本字段。再次感谢。 – Pingpong

回答

1

问题是,生成的视图(* .cshtml)没有集合作者的 输入字段。

ASP.NET MVC新视图向导尽力而为。从那里到你。

所以里面Edit.cshtml你可以使用编辑器模板:

@model BookModel 

@using (Html.BeginForm()) 
{ 
    <table> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Text</th> 
      </tr> 
     </thead> 
     <tbody> 
      @Html.EditorFor(x => x.Authors) 
     </tbody> 
    </table> 

    <input type="submit" value="Edit" /> 
} 

,然后定义编辑模板,它会自动为你收集的每个元素进行绘制的作者(~/Views/Shared/EditorTemplates/Author.cshtml):

@model Author 
<tr> 
    <td>@Html.EditorFor(x => x.Name)</td> 
    <td>@Html.EditorFor(x => x.Text)</td> 
</tr> 
+0

谢谢。 MVC如何在EditorTemplates文件夹中找到Author.cshtml?有没有教程链接?再次感谢。 – Pingpong

+0

@Pingpong,这是一个惯例。它查看集合中作者的类型(而不是名称)。然后它会在'〜/ Views/YourController/EditorTemplates'中首先查找一个名为'Author.cshtml'的视图,如果它没有找到它,它会在'〜/ Views/Shared/EditorTemplates'中查找。显示模板也存在相同的概念,以及在任何地方只需将Display by Display替换为Display。这两个被称为模板助手。 –

+0

名称EditorTemplates内的路径:〜/ Views/Shared/EditorTemplates/Author.cshtml,必须命名为EditorTemplates吗?可以〜/ Views/Shared/Author.cshtml?如何命名共享文件夹中的文件? – Pingpong