将 属性 委托传递给 Blazor 组件给出 'does not take 1 argument' 错误
Passing property delegate into Blazor component giving 'does not take 1 argument' error
我正在尝试将 属性 作为委托传递给 Blazor 组件。但是,我收到 Delegate 'Func<Pen, int, stirng>' does not take 1 argument
错误。不确定正确的语法应该是什么。
这是组件:
@typeparam TItem
<div class="MarelAutoComplete">
<div class="MarelAutoCompleteList">
@foreach (var item in Data.Select(Property))
{
...
}
</div>
</div>
@code {
[Parameter]
public List<TItem> Data { get; set; }
[Parameter]
public Func<TItem, string> Property { get; set; }
}
调用代码如下:
<MyComponent TItem="Pen"
TValue="myVal"
Data="Pens"
Property="pen => pen.PenNumber" /> // Error On This Line.
@code {
List<Pen> Pens { get; set; }
}
您报告的错误是 Delegate 'Func<Pen, int, string>' does not take 1 argument
而 Property
被定义为 Func<TItem, string>
。
Func<TItem, string> Property
说我想要一个如下所示的函数:
string MyMethod(TItem item)
您的匿名函数是 pen => pen.PenNumber
,属性 期望 pen.PenNumber
作为字符串。是吗?
这是您正在执行的操作的简化工作版本:
TextBox.razor
@typeparam TItem
<h3>@Value</h3>
@foreach (var item in Data.Select(this.Property))
{
<div>@item</div>
}
@code {
[Parameter] public string Value { get; set; } = "Bonjour";
[Parameter] public Func<TItem, string> Property { get; set; }
[Parameter] public List<TItem> Data { get; set; }
}
Index.razor
@page "/"
@using Blazor.Starter.Data
<div>
<TextBox TItem="Model" Data="models" Property="item => item.Value"></TextBox>
</div>
@code {
public string GetProperty(Model model)
{
return model.Value;
}
public List<Model> models => new List<Model>()
{
new Model() { Value = "Fred"},
new Model() { Value = "Jon"},
new Model() { Value = "Bob"},
};
public class Model
{
public string Value { get; set; }
}
}
问题是一个简单的语法问题。这样定义输入函数时,输入变量需要用括号括起来。
它通过改变这个来工作:
Property="pen => pen.PenNumber"
对此:
Property="(pen) => pen.PenNumber"
我正在尝试将 属性 作为委托传递给 Blazor 组件。但是,我收到 Delegate 'Func<Pen, int, stirng>' does not take 1 argument
错误。不确定正确的语法应该是什么。
这是组件:
@typeparam TItem
<div class="MarelAutoComplete">
<div class="MarelAutoCompleteList">
@foreach (var item in Data.Select(Property))
{
...
}
</div>
</div>
@code {
[Parameter]
public List<TItem> Data { get; set; }
[Parameter]
public Func<TItem, string> Property { get; set; }
}
调用代码如下:
<MyComponent TItem="Pen"
TValue="myVal"
Data="Pens"
Property="pen => pen.PenNumber" /> // Error On This Line.
@code {
List<Pen> Pens { get; set; }
}
您报告的错误是 Delegate 'Func<Pen, int, string>' does not take 1 argument
而 Property
被定义为 Func<TItem, string>
。
Func<TItem, string> Property
说我想要一个如下所示的函数:
string MyMethod(TItem item)
您的匿名函数是 pen => pen.PenNumber
,属性 期望 pen.PenNumber
作为字符串。是吗?
这是您正在执行的操作的简化工作版本:
TextBox.razor
@typeparam TItem
<h3>@Value</h3>
@foreach (var item in Data.Select(this.Property))
{
<div>@item</div>
}
@code {
[Parameter] public string Value { get; set; } = "Bonjour";
[Parameter] public Func<TItem, string> Property { get; set; }
[Parameter] public List<TItem> Data { get; set; }
}
Index.razor
@page "/"
@using Blazor.Starter.Data
<div>
<TextBox TItem="Model" Data="models" Property="item => item.Value"></TextBox>
</div>
@code {
public string GetProperty(Model model)
{
return model.Value;
}
public List<Model> models => new List<Model>()
{
new Model() { Value = "Fred"},
new Model() { Value = "Jon"},
new Model() { Value = "Bob"},
};
public class Model
{
public string Value { get; set; }
}
}
问题是一个简单的语法问题。这样定义输入函数时,输入变量需要用括号括起来。
它通过改变这个来工作:
Property="pen => pen.PenNumber"
对此:
Property="(pen) => pen.PenNumber"