Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Blazor';使用Razor页面中的函数创建事件处理程序_Asp.net_Razor_Razor Pages_Blazor Server Side - Fatal编程技术网

Asp.net Blazor';使用Razor页面中的函数创建事件处理程序

Asp.net Blazor';使用Razor页面中的函数创建事件处理程序,asp.net,razor,razor-pages,blazor-server-side,Asp.net,Razor,Razor Pages,Blazor Server Side,我们有一个现有的ASP.NET核心应用程序和Razor页面。我试图包括Razor组件(Blazor服务器),以便在带有输入框和下拉列表的页面中提供客户端响应,例如。将输入表单和提交按钮移动到组件文件(.razor)后,我尝试将表单提交处理程序链接回原始razor页面中的函数。然而,我找不到办法 假设我使用以下模型: public class CustomerViewModel { [Required] public string Name { get; set; } } Raz

我们有一个现有的ASP.NET核心应用程序和Razor页面。我试图包括Razor组件(Blazor服务器),以便在带有输入框和下拉列表的页面中提供客户端响应,例如。将输入表单和提交按钮移动到组件文件(.razor)后,我尝试将表单提交处理程序链接回原始razor页面中的函数。然而,我找不到办法

假设我使用以下模型:

public class CustomerViewModel
{
    [Required]
    public string Name { get; set; }
}
Razor组件(Blazor服务器)看起来与下面类似,例如CustomerDetails.Razor:

<EditForm Model="@Customer" OnValidSubmit="HandleValidSubmit">
    <DataAnnotationsValidator />
    <ValidationSummary />

    <label>Name</label>
    <InputText @bind-Value="Customer.Name" />

    <input type="submit" value="Submit" />
</EditForm>

@code
{
    [Parameter]
    public EventCallback<CustomerViewModel> SubmitEventCallback { get; set; }

    public CustomerViewModel Customer { get; set; } = new();

    public void HandleValidSubmit()
    {
        // Handle form submission ...
    }
}
代码可以编译,但在运行时出现错误

处理请求时发生未处理的异常。

JsonException:检测到可能的对象循环。这两者都可以 可能是由于循环或如果对象深度大于最大值 允许的深度为64。考虑使用引用处理程序。 JsonSerializerOptions以支持循环

System.Text.Json.ThrowHelper.ThrowJsonException_SerializerCycleDetected(int-maxDepth)

经过一些研究,我认为不可能将功能委托从Razor页面传递到Razor组件(Blazer服务器)。根据,参数必须是JSON可序列化的,这对于函数委托是不可能的或不安全的。然后,要使用Blazor的
,唯一的选择是将所有表单提交处理程序移动到Blazor组件

我理解正确吗?或者是否有其他方法来处理父Razor页面中的Blazor事件

<component type="typeof( CustomerDetails )"
           render-mode="ServerPrerendered" 
           param-SubmitCallback="@Model.CustomerFormHandler" />
public Action<CustomerViewModel> CustomerFormHandler { get; set; }

public void OnGet()
{
    CustomerFormHandler = // Some handler function... ;
}