在 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 的用途是啥? [关闭]