从编辑页面调用另一个页面在 Razor 页面中引发异常

Posted

技术标签:

【中文标题】从编辑页面调用另一个页面在 Razor 页面中引发异常【英文标题】:Calling another page from Edit page throwing exception in Razor Pages 【发布时间】:2022-01-04 14:45:43 【问题描述】:

我有这样的编辑页面

我想克隆这个页面,我在这个编辑页面中有一个克隆按钮,像这样

给定一个链接来导航到类似这样的克隆页面

<a asp-page="./RequestFormClone" asp-route-RequestID="@Model.RequestID" class="dropdown-item" style="margin-bottom: 0; padding: 3px 0px 4px 8px; cursor: pointer;color:black;">
                Clone Request
            </a>

但是当我点击链接时,我得到了这个错误

InvalidOperationException:传递到 ViewDataDictionary 的模型项属于“ProjectName.Pages.RequestFormCloneModel”类型,但此 ViewDataDictionary 实例需要一个“ProjectName.Pages.RequestFormEditModel”类型的模型项。

不太明白是什么导致了这个错误,因为我需要复制 RequestFormEdit 的确切副本,我只是创建了另一个与 RequestFormEdit 相同的页面 RequestFormClone。

任何帮助将不胜感激。

谢谢, 蒂娜·约翰

【问题讨论】:

【参考方案1】:

InvalidOperationException:传入的模型项 ViewDataDictionary 是类型 'ProjectName.Pages.RequestFormCloneModel',但这个 ViewDataDictionary 实例需要类型的模型项 'ProjectName.Pages.RequestFormEditModel'。

那是因为你的页面和PageModel不匹配。

请检查您的 PageModel 名称,与您在 razor 页面中定义的 @model 保持一致。

也就是说,如果你像下面这样创建一个PageModel:

public class RequestFormCloneModel: PageModel   //PageModel name
//...

您的剃须刀页面应如下所示:

@page
@model RequestFormCloneModel      //model name

【讨论】:

感谢回复。能否请您解释一下这两行代码模型RequestFormCloneModel和模型ProjectName.Pages.RequestFormCloneModel有什么区别。因为后一个是我的代码,所以当我将其更改为您的代码时,它工作正常。 嗨@Teena,我想你可能不仔细看。我认为在您的页面中应该是:ProjectName.Pages.RequestFormEditModel 而不是ProjectName.Pages.RequestFormCloneModelRequestFormCloneModel ProjectName.Pages.RequestFormCloneModel应该是一样的,因为第二个只是特定的命名空间。报错信息很清楚,PageModel和required model(@model)不匹配。 无论如何,您只需要确保后端的PageModel名称和前端的模型名称(You can see the answer I share, it told you what is model name and what is the PageModel name)保持相同。这应该是你主要关心的。

以上是关于从编辑页面调用另一个页面在 Razor 页面中引发异常的主要内容,如果未能解决你的问题,请参考以下文章

如何从服务器端 Blazor 应用程序中的 Blazor 组件调用 razor 页面而不导致页面刷新

应用程序找不到位于另一个项目中的 Razor 页面

从 Blazor 中的页面组件调用 MainLayout 中的方法

当 API 调用完成时,如何从 .RAZOR 主页面中的所有子组件触发/刷新我的主 .RAZOR 页面?

无法在 Razor 页面中调用 onPost

在 Razor 页面中使用 OnPost 页面处理程序处理 AJAX 请求