从编辑页面调用另一个页面在 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.RequestFormCloneModel
。 RequestFormCloneModel
和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 页面而不导致页面刷新
从 Blazor 中的页面组件调用 MainLayout 中的方法