【问题标题】:Create.cshtml on the index.cshtml page?在 index.cshtml 页面上创建.cshtml?
【发布时间】:2016-10-05 09:22:15
【问题描述】:

我已经使用 .net 渲染了一个 CRUD,并且在同一文件夹中有以下文件。

Create.cshtml、Delete.cshtml、Details.cshtml、Edit.cshtml、Index.cshtml

现在是在索引页面上创建新记录的链接

@Html.ActionLink("Create New", "Create")

但我希望创建表单在索引页面上。

我测试使用PartialView(我不知道是从index.cshtml中的create.cshtml复制代码还是使用两个文件更好,但我得到了同样的错误)。

将控制器中的return更改为return PartialView(board);

还有@Html.Partial("Create")的视图

但是我得到了编译错误

传入字典的模型项是类型 'System.Collections.Generic.List`1[Klotterplank.Models.Board]',但是 这个字典需要一个类型的模型项 'Klotterplank.Models.Board'。

这是我在 index.cshtml 中使用的模型

@model IEnumerable<Klotterplank.Models.Board>

这是我在 create.cshtml 中使用的模型

@model Klotterplank.Models.Board

【问题讨论】:

  • 您需要一个视图模型,其中包含您编辑的Board 的每个属性的属性,以及现有Board 的集合属性 - 请参阅What is ViewModel in MVC?
  • 也许你可以尝试使用这个部分overload并相应地传递Board实例。
  • 使用partial的问题是提交会出现问题,需要返回视图,因为ModelState无效

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


【解决方案1】:

如果您在具有不同模型的父页面中使用 PartialView,则必须将不同的模型传递给 Html Helper,如下所示:

@Html.Partial("Create", new Klotterplank.Models.Board())

【讨论】:

    【解决方案2】:

    错误本身就说明了一切:When a partial view is instantiated, it gets a copy of the parent view’s ViewData dictionary。您的Create 视图需要不同类型的数据,因此您可以这样提供:

    @Html.Partial("Create", viewModel)
    

    例如,viewModel 可以等于 Model.Fist()(因为在您的 Index 视图中,您有一组板作为模型)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      相关资源
      最近更新 更多