将参数发送到 Razor 页面 RCL NET Core

Posted

技术标签:

【中文标题】将参数发送到 Razor 页面 RCL NET Core【英文标题】:Send parameters to Razor Page RCL NET Core 【发布时间】:2020-04-26 06:11:24 【问题描述】:

您好,提前感谢您能给我的任何帮助。

我正在使用 .NET Core 3.1

我有一个带有 Razor 页面的 Razor 类库。

它们是包含在 Web MVC 项目的视图中的部分页面,也是 .NET Core 3.1

RCL 的剃须刀页面位于“\Shares”子文件夹的“\Pages”文件夹中。

我像这样加载部分页面:<partial name="_SpatialTest" />

它工作正常。

但是我需要从包含的视图中向 RCL 的某些 Razor 页面发送几个参数,这就是我的问题,因为它不是超链接,我无法在路由中添加参数,或者在正文,或在查询字符串中...如此处建议:https://www.learnrazorpages.com/razor-pages/routing

我已经将它作为视图数据、模型和数据进行了尝试,它给了我一些错误,但它从来没有工作过,就像这里建议的那样:https://www.learnrazorpages.com/razor-pages/model-binding

我是这样设置的:

RCL 中的 Razor 页面 ->

cshtml.cs:

namespace SpatialUnitsRclTest.Pages.Shared

    public class _SpatialTestModel : PageModel
    
        [BindProperty(SupportsGet = true)]
        public string NameTest  get; set; 

        public void OnGet(send parameters)
        
            // do something with the parameters and create the Razor Page ViewModel ...
        
    

cshtml:

@page
@model SpatialUnitsRclTest.Pages.Shared._SpatialTestModel
<h5>Test RCL partial @Model.NameTest</h5>
<div id="mapid" style="min-height: 180px;"></div>

在 Web MVC 项目中查看 (cshtml) ->

<div style="height: 200px; width: 200px;">
    @ var partialModel = new SpatialUnitsRclTest.Pages.Shared._SpatialTestModel  NameTest = "pruebaaaaaaaaaaa" ; 
    <partial name="_SpatialTest" model="@partialModel"  />
</div>

错误是:

NullReferenceException:对象引用未设置为 目的。 AspNetCore.Pages_Shared__SpatialTest.get_Model() AspNetCore.Pages_Shared__SpatialTest.ExecuteAsync() 在 _SpatialTest.cshtml + 测试 RCL 部分 @Model.NameTest Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage 页面,ViewContext 上下文) Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage 页面,ViewContext 上下文,bool invokeViewStarts) Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext 语境) Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.RenderPartialViewAsync(TextWriter 作家、对象模型、IView 视图) Microsoft.AspNetCore.Mvc.TagHelpers.PartialTagHelper.ProcessAsync(TagHelperContext 上下文,TagHelperOutput 输出) Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.g__Awaited|0_0(任务 任务, TagHelperExecutionContext executionContext, int i, int count) Index.cshtml 中的 AspNetCore.Views_Home_Index.ExecuteAsync() + Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage 页面,ViewContext 上下文) Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage 页面,ViewContext 上下文,bool invokeViewStarts) Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext 语境) Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, 字符串 contentType, Nullable statusCode) Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, 字符串 contentType, Nullable statusCode) Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext、IView 视图、ViewDataDictionary 视图数据、 ITempDataDictionary tempData、字符串 contentType、Nullable 状态码) Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext 上下文,ViewResult 结果) Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext 语境) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|29_0(ResourceInvoker 调用程序,Task lastTask,State next, 范围作用域,对象状态,bool isCompleted) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed 语境) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext(ref State next, ref Scope scope, ref object state, ref 布尔已完成) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters() Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|24_0(ResourceInvoker 调用者,任务 lastTask,下一个状态,作用域范围,对象状态,布尔 完成了) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed 语境) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(参考状态 接下来,ref Scope 范围,ref 对象状态,ref bool isCompleted) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用者、任务任务、IDisposable 范围) Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(端点 端点、任务 requestTask、ILogger 记录器) Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext 语境) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)

你能帮帮我吗?

非常感谢。问候。

【问题讨论】:

没有人知道它为什么会失败?非常感谢!!! 【参考方案1】:

如果您想在您的 MVC 项目视图页面中使用指定的模型数据呈现部分视图(包含在您的 RCL 中),请参考以下示例。

Razor View _SpatialTest1(在 RCL 中)

@model RclTest.Models.SpatialTestModel
@
    //code logic here


<h1>_SpatialTest1</h1>
<h5>Test RCL partial @Model.NameTest</h5> 

注意:在您的 RCL 中创建 Razor 视图 _SpatialTest1,而不是 Razor 页面。 p>

SpatialTestModel 类(在 RCL 中)

public class SpatialTestModel

    public string NameTest  get; set; 

查看页面(在 MVC 项目中)

@
    var partialModel = new RclTest.Models.SpatialTestModel  NameTest = "pruebaaaaaaaaaaa" ;


<partial name="_SpatialTest1" model="@partialModel" />

测试结果

【讨论】:

非常感谢您的回答。它可能是一种替代方法,但我给出的示例非常简单,可以清楚地解释我的问题(我无法将参数传递给 RCL 的 Razor 页面)。我不是真的要传递一个名称,而是一个配置对象,在 RazorPage 的“伪控制器”中,在 OnGet 方法中,我必须执行操作,这将生成 Razor Page 的模型。也许我不知道自己想做什么?

以上是关于将参数发送到 Razor 页面 RCL NET Core的主要内容,如果未能解决你的问题,请参考以下文章

如何将复杂的参数发送到 asp.net

如何从 Razor Pages 应用程序中的插件动态加载页面?

将二进制数据作为参数发送到 Web 服务中的方法?

如何将 jchararray 作为参数发送到 C 函数

通过 Url.Action 将参数发送到 asp.net MVC 中的控制器

具有多个路由参数的 ASP.NET Core Razor 页面层次结构