将值从一个Blazor组件传递到通用列表

时间:2020-03-14 13:43:02

标签: c# blazor

我在名为RowData的通用列表中有两个变量,并且有两个名为RowPositionRowInfo的变量,它们将在服务器端提供数据。

通用列表将被导入到一个函数中,该函数将构建表单并使用传递给它的数据。

我的问题是在服务器端使用什么来允许数据传递?例如:

RowPosition : RowInfo
1 : blahyes
2 : blahno
3 : blahlol
4 : blahblah

1 个答案:

答案 0 :(得分:0)

对于我来说,您发布的代码不足以使我有很多工作要做,但是组件之间有几种相互交流的方式。

您可以使用级联值,子组件将能够像这样引用父级:

<CascadingValue Value="GalleryManager">
    <ArtistListViewer></ArtistListViewer>
    <ImageListViewer></ImageListViewer>
</CascadingValue>

在这里,我的ArtistListViewer和ImageListViewer组件可以使用以下属性来引用图库管理器:

[CascadingParameter]
GalleryManager GalleryManager { get; set; }

如果使用频率过高,可能会导致性能问题,具体取决于您的网站繁忙程度。

我写了一篇关于另一种方式的博客文章:

使用接口在组件之间进行通信 https://datajugglerblazor.blogspot.com/2020/01/how-to-use-interfaces-to-communicate.html

如果您发送复杂的内容,我更喜欢上面的方法,其中父对象是IBlazorComponentParent,子对象是IBlazorComponent。

Nuget程序包:DataJuggler.Blazor.Components

以下是您可以在子级上设置“父级”属性的方法:

 <Login OnLogin="LoginComplete" Parent=this></Login>

Parent =这是可能的,因为我的登录组件是IBlazorComponent,而我的索引页面是IBlazorComponentParent。

子代传承人像这样向父代注册:

public IBlazorComponentParent Parent
{
    get { return parent; }
    set 
    { 
        // set the parent
        parent = value;

        // if the value for HasParent is true
        if (HasParent)
        {
            // Register with the parent to receive messages from the parent
            Parent.Register(this);
        }
    }
}

“索引”页面上的“注册”事件将子级存储为属性:

public void Register(IBlazorComponent component)
{
    // If the component object exists
    if (NullHelper.Exists(component, Children))
    {
        // If this is the Login component
        if (component.Name == "Login")
        {
            // Set the Signup control
            this.Login = component as Login;
        }

        // add this child
        Children.Add(component);
    }
}

这时,我的Login组件知道其父组件,并且父Index页面将Login组件作为变量。

然后,您可以发送任何您喜欢的信息。

在我的登录完成方法中,我向父母发送一条消息:

// if the Parent exists
if (HasParent)
{
    // create a message to send
    Message message = new Message();

    // Set the text
    message.Text = loginResponse.Message;

    // Send a message to the parent
    Parent.ReceiveData(message);;
}

我只是在上面传递文本,但是还有一个NamedParameters集合,您可以传递任何类型的数据(对象)。

如果有兴趣,这里有一个完整的工作示例和教程:

代码 https://github.com/DataJuggler/BlazorImageGallery

视频 https://youtu.be/3xKXJQ4qThQ