首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Blazor )子组件未呈现

(Blazor )子组件未呈现
EN

Stack Overflow用户
提问于 2020-07-14 20:24:20
回答 2查看 1.1K关注 0票数 0

我使用Syncfusion创建了一个Dialog组件,im试图从父组件调用它,但它没有呈现。

这是我的父组件,在这里im使用我的子组件(ModalAcceptCancel)中的@ref,所以当我点击删除按钮(在我的网格中),im能够调用一个名为OpenDialog的方法来呈现或显示我的模式。

代码语言:javascript
运行
复制
@using App.Dtos
@using App.Data
@using Syncfusion.Blazor.Buttons
@inject NavigationManager NavigationManager

//This is my child component
<ModalAcceptCancel @ref="Modal"/>
//
<SfGrid @ref="SfGridProfesores" DataSource="@DsProfesores" AllowPaging="true">
    <GridColumns>
        <GridColumn Field=@nameof(ProfesorDto.Id) HeaderText="Identificador" TextAlign="TextAlign.Right" Width="120">
        </GridColumn>
        <GridColumn Field=@nameof(ProfesorDto.Nombres) HeaderText="Nombre" Width="200"></GridColumn>
        <GridColumn Field=@nameof(ProfesorDto.CorreoElectronico) HeaderText="Correo Electrónico" Width="150"></GridColumn>
        <GridColumn HeaderText="Acciones" TextAlign="TextAlign.Center" Width="120">
            <Template>
                @{
                    var profesor = (context as ProfesorDto);             
                    <SfButton @onclick="@(() => NavigationManager.NavigateTo("Profesor/"+profesor.Id))" CssClass="e-info">Editar</SfButton>
                    <SfButton CssClass="e-danger" @onclick="(() => DeleteProfesor(profesor.Id))">Borrar</SfButton>                                  
                }
            </Template>
        </GridColumn>
    </GridColumns>
</SfGrid>

@code {
    [Parameter]
    public IReadOnlyList<ProfesorDto> DsProfesores { get; set; }

    [Inject]
    public IProfesorService ProfesorService { get; set; }

    SfGrid<ProfesorDto> SfGridProfesores;

    ModalAcceptCancel Modal; 

    //Here i try to open my Modal (ChildComponent)
    private void DeleteProfesor(int id)
    {
        Modal.OpenDialog();
        //ProfesorService.BorraProfesor(id);
       // SfGridProfesores.Refresh();
    }
}

这是我的子组件的代码。我的同步对话框可见性被绑定到"Is可视属性“,当OpenDialog方法被称为属性更改为true时,它应该显示我的模式。

代码语言:javascript
运行
复制
@using Syncfusion.Blazor.Popups
@using Syncfusion.Blazor.Buttons


<SfDialog Width="500px" ShowCloseIcon="true" CloseOnEscape="true" @bind-Visible="@IsVisible">
    <DialogTemplates>
        <Header> Atención </Header>
        <Content> ¿Estás seguro que deseas eliminar este elemento? </Content>
        <FooterTemplate>
            <SfButton CssClass="e-primary e-flat" @onclick="@CloseDialog">
                Aceptar
            </SfButton>
            <SfButton CssClass="e-flat" @onclick="@CloseDialog">
                Cancelar
            </SfButton>
        </FooterTemplate>
    </DialogTemplates>
</SfDialog>

@code {
    private bool IsVisible { get; set; } = false;

    public void OpenDialog()
    {
        this.IsVisible = true;
    }

    public void CloseDialog()
    {
        this.IsVisible = false;
    }
}

我做错了什么?这样做有更好的做法吗?

我对发展真的很陌生。对不起我的英语。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-14 20:42:30

这就是应该调用模态的代码,对吗?

代码语言:javascript
运行
复制
 @onclick="(() => BorrarProfesor(profesor.Id))"

您需要这个代码:

代码语言:javascript
运行
复制
@onclick="(() => DeleteProfesor(profesor.Id))"

该方法调用DeleteProfesor方法,传递给它的是“教授”id,Modal.OpenDialog();是从该方法导出的.

定义为DeleteProfesor如下:

代码语言:javascript
运行
复制
//Here i try to open my Modal (ChildComponent)
    private async void DeleteProfesor(int id)
    {
        Modal.OpenDialog();
        //ProfesorService.BorraProfesor(id);
       // SfGridProfesores.Refresh();
    }

我希望这能帮上忙!如果你被困住了,告诉我

票数 0
EN

Stack Overflow用户

发布于 2020-07-15 07:44:55

来自同步支持的问候,

我们已经验证了您报告的查询和共享代码块。IsVisible属性是从另一个剃须刀页面调用的,因此属性更改不会受到SfDialog的影响,因此不会显示。我们建议您调用属性更新旁边的StateHasChanged(),以解决报告的问题。我们还准备了一个试着满足你方要求的样品。

样本:https://www.syncfusion.com/downloads/support/directtrac/general/ze/SFDIAL~22087980339

如果解决办法有帮助,请告诉我们,

致以敬意,

Indrajith

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62903450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档