【问题标题】:How to expose a collection of items from MVC model to a MVC view (*.cshtml) in ASP.NET MVC如何在 ASP.NET MVC 中将项目集合从 MVC 模型公开到 MVC 视图 (*.cshtml)
【发布时间】:2011-07-26 13:56:45
【问题描述】:

我有一个包含对象集合的 MVC 模型对象。我想将 MVC 模型公开为 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; }
    }

下面是控制器中的Action方法:

public ActionResult Edit(int id)
        {

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

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

任何想法都将不胜感激。

【问题讨论】:

  • 你需要一个下拉菜单来选择作者还是需要一个复选框列表?
  • 您可以粘贴代码以供您查看吗?如果您使用脚手架,它可能不一定会为您生成此代码……您必须自己创建它。您希望它看起来如何?是否要显示表格、无序列表等?
  • 谢谢。它是一个编辑视图,因此它可以是一个表格,一个作者的一行。每行都有一个名称标签和用于编辑的名称文本字段。再次感谢。

标签: asp.net-mvc asp.net-mvc-3 razor


【解决方案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>

【讨论】:

  • 谢谢。 MVC 如何在 EditorTemplates 文件夹中找到 Author.cshtml?这个有教程链接吗?再次感谢。
  • @Pingpong,这是一个约定。它查看集合中元素的类型(不是名称),即Author。然后它首先在~/Views/YourController/EditorTemplates 中查找一个名为Author.cshtml 的视图,如果找不到,它会在~/Views/Shared/EditorTemplates 中查找。显示模板也存在相同的概念,您只需在任何地方用 Display 替换 Editor。这两个被称为模板化助手。
  • 路径中的名称EditorTemplates:~/Views/Shared/EditorTemplates/Author.cshtml,一定要命名为EditorTemplates吗?可以是 ~/Views/Shared/Author.cshtml 吗?如何命名共享文件夹中的文件?
  • @Pingpong,是的,它必须在 EditorTemplates 中。这就是约定。
  • 我想知道你是否可以看看这个问题。谢谢:stackoverflow.com/questions/6843500/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
相关资源
最近更新 更多