我在名为RowData
的通用列表中有两个变量,并且有两个名为RowPosition
和RowInfo
的变量,它们将在服务器端提供数据。
通用列表将被导入到一个函数中,该函数将构建表单并使用传递给它的数据。
我的问题是在服务器端使用什么来允许数据传递?例如:
RowPosition : RowInfo
1 : blahyes
2 : blahno
3 : blahlol
4 : blahblah
答案 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集合,您可以传递任何类型的数据(对象)。
如果有兴趣,这里有一个完整的工作示例和教程: