Asp.net Blazor';使用Razor页面中的函数创建事件处理程序
我们有一个现有的ASP.NET核心应用程序和Razor页面。我试图包括Razor组件(Blazor服务器),以便在带有输入框和下拉列表的页面中提供客户端响应,例如。将输入表单和提交按钮移动到组件文件(.razor)后,我尝试将表单提交处理程序链接回原始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
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... ;
}