如何将隐藏的输入值绑定到 blazor dotnetcore 3.1 中的 parent 组件
How can bind hidden input value to parent component in blazor dotnetcore 3.1
我是 blazor 的新手。我已将具有特定值的隐藏输入绑定发送到 parent 组件。我继续 this tutorial
Child 组件是(名称是 MyControl):
<div>
@foreach (var result in this.Results)
{
if (result.IsFinal)
{
@(Text= result.Items[0].Transcript)
<input type="hidden" @oninput="OnTextChanged" value="Text" />
}
else
{
<img class="embed-responsive" style="height: 50px; width: auto;" src="https://gifdownload.net/wp-content/uploads/2019/01/blue-loader-gif-3.gif"/>
}
}
</div>
@code
{
[Parameter]
public string Text { get; set; }
[Parameter]
public EventCallback<string> TextChanged { get; set; }
private Task OnTextChanged(ChangeEventArgs e)
{
Text = e.Value.ToString();
return TextChanged.InvokeAsync(Text);
}
}
和Parent的分量是:
@inherits LayoutComponentBase
<div class="sidebar">
<MyControl @bind-Text="text" />
<NavMenu />
</div>
<div class="main">
<div class="top-row px-4">
<a href="http://blazor.net" target="_blank" class="ml-md-auto">About</a>
</div>
<div class="content px-4">
<CascadingValue Value="text">
@Body
</CascadingValue>
</div>
</div>
@code{
private string text;
}
以及在索引组件中的用法示例:
@page "/"
@if (text != null)
{
<p>
@text
</p>
}
@code
{
[CascadingParameter]
public string text { get; set; }
}
注意:我不使用键盘来输入文本。来自 @(Text= result.Items[0].Transcript)
的输入填充。
完全我想从 child 提供文本并发送到 parent 但我不显示文本(为此目的,我使用了隐藏输入),然后通过 CascadingValue 参数发送到所有组件, 但没有工作,也没有错误,我不知道为什么。
用CSS隐藏即可。
我在我的开源项目 BlazorChat 中做了同样的事情。
我的方法很简单 CSS:
CSS Class
.className
{
position: fixed;
left: -200px;
top: -200px;
}
根据对象的大小进行调整
这是一个工作示例:
代码
https://github.com/DataJuggler/BlazorChat
如果您想访问,甚至可以访问实时站点:
此代码:<input type="hidden" @oninput="OnTextChanged" value="Text" />
导致从变量 (Text 属性) 到控件的一种数据绑定方式,但不是另一种方式,因为没有执行输入 UI,也没有触发输入事件来反映这一点。这就是为什么永远不会调用 OnTextChanged 处理程序并且永远不会调用 TextChanged 'delegate' 的原因,因此父组件永远不会从子组件( MyControl )获取值。
要查看其余代码是否正常运行,请将 'hidden' 更改为 'text',然后在文本框中键入。这样就会触发输入事件,整个过程就可以了。
我不知道你想做什么,但你应该寻找一个没有隐藏输入的解决方案,它无法获得任何输入,因此无法触发事件等
希望这对您有所帮助...
我是 blazor 的新手。我已将具有特定值的隐藏输入绑定发送到 parent 组件。我继续 this tutorial
Child 组件是(名称是 MyControl):
<div>
@foreach (var result in this.Results)
{
if (result.IsFinal)
{
@(Text= result.Items[0].Transcript)
<input type="hidden" @oninput="OnTextChanged" value="Text" />
}
else
{
<img class="embed-responsive" style="height: 50px; width: auto;" src="https://gifdownload.net/wp-content/uploads/2019/01/blue-loader-gif-3.gif"/>
}
}
</div>
@code
{
[Parameter]
public string Text { get; set; }
[Parameter]
public EventCallback<string> TextChanged { get; set; }
private Task OnTextChanged(ChangeEventArgs e)
{
Text = e.Value.ToString();
return TextChanged.InvokeAsync(Text);
}
}
和Parent的分量是:
@inherits LayoutComponentBase
<div class="sidebar">
<MyControl @bind-Text="text" />
<NavMenu />
</div>
<div class="main">
<div class="top-row px-4">
<a href="http://blazor.net" target="_blank" class="ml-md-auto">About</a>
</div>
<div class="content px-4">
<CascadingValue Value="text">
@Body
</CascadingValue>
</div>
</div>
@code{
private string text;
}
以及在索引组件中的用法示例:
@page "/"
@if (text != null)
{
<p>
@text
</p>
}
@code
{
[CascadingParameter]
public string text { get; set; }
}
注意:我不使用键盘来输入文本。来自 @(Text= result.Items[0].Transcript)
的输入填充。
完全我想从 child 提供文本并发送到 parent 但我不显示文本(为此目的,我使用了隐藏输入),然后通过 CascadingValue 参数发送到所有组件, 但没有工作,也没有错误,我不知道为什么。
用CSS隐藏即可。
我在我的开源项目 BlazorChat 中做了同样的事情。
我的方法很简单 CSS:
CSS Class
.className
{
position: fixed;
left: -200px;
top: -200px;
}
根据对象的大小进行调整
这是一个工作示例:
代码 https://github.com/DataJuggler/BlazorChat
如果您想访问,甚至可以访问实时站点:
此代码:<input type="hidden" @oninput="OnTextChanged" value="Text" />
导致从变量 (Text 属性) 到控件的一种数据绑定方式,但不是另一种方式,因为没有执行输入 UI,也没有触发输入事件来反映这一点。这就是为什么永远不会调用 OnTextChanged 处理程序并且永远不会调用 TextChanged 'delegate' 的原因,因此父组件永远不会从子组件( MyControl )获取值。
要查看其余代码是否正常运行,请将 'hidden' 更改为 'text',然后在文本框中键入。这样就会触发输入事件,整个过程就可以了。
我不知道你想做什么,但你应该寻找一个没有隐藏输入的解决方案,它无法获得任何输入,因此无法触发事件等
希望这对您有所帮助...