在 index.cshtml 页面上创建.cshtml?

Posted

技术标签:

【中文标题】在 index.cshtml 页面上创建.cshtml?【英文标题】:Create.cshtml on the index.cshtml page? 【发布时间】: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无效 【参考方案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 视图中,您有一组板作为模型)。

【讨论】:

以上是关于在 index.cshtml 页面上创建.cshtml?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC:@section 的用途是啥? [关闭]

Razor 页面路由到默认页面的问题

使用 ASP.NET MVC 4 从控制器调用另一个不同的视图

为啥.cshtml更改后刷新页面不更新

Index.cshtml 中的有序表布局

在 Blazor 中设置启动页面