【问题标题】:Dynamically change Blazor EditContext at runtime在运行时动态更改 Blazor EditContext
【发布时间】:2022-08-02 13:18:26
【问题描述】:

我在 Blazor Server 应用程序验证的某些时候遇到了困难。

有一个上下文模型“订单”。在 CRUD 操作期间,可以添加新客户或选择现有客户。

第一个 InputSelect 带有选项 New 或 Existing。根据它,有一个隐藏/显示逻辑在哪里显示新客户的输入文本,因此用户可以输入客户名称或显示输入选择,因此用户可以选择现有客户。

这种逻辑在那里运作良好。

问题是:当用户选择新客户并输入客户名称时,我想从当前 EditContext 中删除 CustomerId 模型字段。这意味着如果正在输入新客户,则无需验证现有客户。

但是,在创建 EditContext 字段的集合后,我没有找到任何方法或集合来操作它。

所以,请,如果有人有一些解决方案,我很感激。

private class Order
{

    [StringLength(maximumLength: 200, MinimumLength = 3,ErrorMessage =\"Enter the customer name\")]
    [Required(ErrorMessage =\"Enter the customer name\") ]
    [Display(Name = \"Customer Name\")]
    public string CustomerName { get; set; } = \"\";

    [Required(ErrorMessage =\"Please select the option\")]
    [Display(Name = \"Existing Customer\")]
    public Int16 ExistingCustomerId { get; set; }


    [Required(ErrorMessage =\"Please select the customer\")]
    [Display(Name = \"Customer\")]
    public int? CustomerId { get; set; }
}
  • EditContext 可以解决这个问题。您可以更改上下文。只需 capture the referenceEditContext (<EditContext @ref=\"myEditContext\" ...) 并设置新的上下文。
  • 这几乎是我需要的。实际上我不想更改为新的上下文,否则我需要有 2 个上下文,唯一的区别是一个字段。我实际上想使用现有的上下文,但只是手动从中删除一些字段属性。谢谢

标签: blazor blazor-server-side


【解决方案1】:

根据您的评论,我了解您不想拥有两个模型,但这是最简单的方法,它们可以相互继承

public class AddModel {
    // all fields except ID here
}

public class EditModel : AddModel {
    // just add id property here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 2021-11-12
    • 2023-02-21
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2016-12-20
    相关资源
    最近更新 更多