小编pwi*_*cox的帖子

Blazor 组件中的泛型类型参数是否可以受到约束?

在 Blazor 组件中,您可以创建一个通用参数以在方法中使用,就像在典型的 C# 类中一样。为此,语法是:

@typeparam T
Run Code Online (Sandbox Code Playgroud)

但我想知道如何像在 C# 类中那样约束它。就像是

// pseudocode
@typeparam T : ICloneable 
Run Code Online (Sandbox Code Playgroud)

例如,我需要创建以下组件,允许开发人员传递通用类型的“模型”:

.../GESD.Blazor/共享/GesdTrForm.razor

@typeparam modelType

<EditForm Model="@Model" 
    OnValidSubmit="@OnValidSubmit"
    style="display:table-row"
>
    @ChildContent
</EditForm>

@code {

    [Parameter]
    public RenderFragment ChildContent { get; set; }

    [Parameter]
    public modelType Model { get; set; } // here is the use of the generic

    [Parameter]
    public EventCallback<EditContext> OnValidSubmit { get; set; }

    void demo () {
        var cloned = Model.Clone();
    }

}
Run Code Online (Sandbox Code Playgroud)

但在.Clone()我收到以下错误:

“modelType”不包含“Clone”的定义...

generics components blazor

8
推荐指数
2
解决办法
8034
查看次数

在 Editform 中单击取消(重置按钮)时,Blazor 将模型重置为初始状态

我有一个使用 Blazor 服务器端和 Editform 的 crud 操作。除了在编辑现有记录后尝试重置表单时,一切都很好。

当我更改表单控件中的某些内容然后单击重置按钮时,它会关闭表单。我更改的数据已更新到 HTML 表,但未在数据库中更新。

无论如何我可以防止这种情况吗?

这是我的模型:

public class Address  
{
    public string province { get; set; }
    public string address { get; set; }
    public string contact_name { get; set; }
    public string phone_number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的编辑表格:

<EditForm Model="@model" OnValidSubmit="@HandleValidSubmit">
    <DataAnnotationsValidator />
    <ValidationSummary />
    <div class="form-group">
        <InputText @bind-Value="@model.province" />
    </div> 
    <div class="form-group">
        <InputText @bind-Value="@model.contact_name" />
    </div>
    <div class="form-group">
        <InputText @bind-Value="@model.phone_number" />
    </div>
    <div class="form-group">
        <InputText @bind-Value="@model.address" />
    </div>
    <button type="submit" class="btn …
Run Code Online (Sandbox Code Playgroud)

blazor-server-side

6
推荐指数
1
解决办法
4062
查看次数

如何查看 Javascript 迭代器中的下一个值

假设我有一个迭代器:

function* someIterator () {
    yield 1;
    yield 2;
    yield 3;
}

let iter = someIterator();
Run Code Online (Sandbox Code Playgroud)

...我查看下一个要迭代的元素:

let next = iter.next(); // {value: 1, done: false}
Run Code Online (Sandbox Code Playgroud)

...然后我在循环中使用迭代器:

for(let i of iterator)
    console.log(i); 
// 2
// 3
Run Code Online (Sandbox Code Playgroud)

循环将不包括所查看的元素。我希望看到下一个元素,同时不将其从迭代系列中删除。

换句话说,我希望实现:

let next = peek(iter); // {value: 1, done: false}, or alternatively just 1

for(let i of iterator)
    console.log(i); 
// 1
// 2
// 3 
Run Code Online (Sandbox Code Playgroud)

...而且我不想在不修改可迭代函数的代码的情况下做到这一点。

我的尝试就在我的回答中。它有效(这就是我将其作为答案的原因),但我担心它构建的对象比它必须的更复杂。我担心它不适用于“完成”对象与{ value = undefined, done = true }. 因此,非常欢迎任何改进的答案。

javascript iterator peek

6
推荐指数
2
解决办法
2424
查看次数