【问题标题】:Convert empty URL string to null to bypass form validation将空 URL 字符串转换为 null 以绕过表单验证
【发布时间】:2021-11-29 17:19:15
【问题描述】:

我有一个 Blazor EditForm 用于编辑以前创建的对象。允许用户编辑的字段之一是名为Linkstring 属性,它带有[Url] 注释。此字段未使用 [Required] 属性进行注释,我不希望这样。

创建对象时,我可以在表单中将此字段留空,没问题。如果我编辑一个带有已经空白的Link 字段的对象,它也可以正常工作。

当我尝试编辑对象并删除之前在对象中的Link 时出现问题(清除表单字段)。我收到 Url DataAnnotation 消息(“链接字段不是有效的完全限定的 http、https 或 ftp URL。”)并且我无法提交表单。我向属性 [DataFormat(ConvertEmptyStringToNull = true)] 添加了另一个 DataAnnotation,认为这可以解决我的问题并将空字符串转换为 null,但它不会改变任何内容。

属性:

[Url]
[DisplayFormat(ConvertEmptyStringToNull = true)]
public string Link { get; set; }

表格:

<div class="form-group">
    <label for="Link">Link</label>
    <InputText @bind-Value=Item.Link class="form-control"/>
    <ValidationMessage For=@(() => Item.Link)/>
</div>

编辑:这似乎是“设计使然”(即 .NET 工程师拒绝修复的错误)https://github.com/dotnet/runtime/issues/53820

【问题讨论】:

    标签: c# asp.net-core blazor


    【解决方案1】:

    以下是我可以建议的替代方案:

    public string Url 
    { 
       get { return _value; } 
       set { _value = string.IsNullOrWhiteSpace(value) ? null : value; }
    } 
    

    似乎不像宣传的那样有效的原件:

    您需要将AllowEmptyStrings 添加到您的Required 注释并包含它。即,

    [Required(AllowEmptyStrings = true)]
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    

    查看此问题/答案:Allow empty strings for fields marked with PhoneAttribute or UrlAttribute

    【讨论】:

    • 谢谢,但请仔细阅读我的问题。我不希望它是[Required],我确实希望将空字符串转换为 null。
    • 我确实阅读了您的问题。我只是认为您不希望它是必需的,因为您认为 required 不允许空字符串。我很抱歉。
    • 您反对这样做吗?公共字符串网址 { 获取 { 返回 _value; } 设置 { _value = string.IsNullOrWhiteSpace(value) ?空:值; } }
    • 老实说,如果这允许我想要的行为,我会使用它,但它没有。当我尝试创建对象时,我仍然收到“需要链接字段”验证消息。我也尝试过使用它并将链接字段设置为代码中的空字符串,但验证告诉我“链接字段不是有效的完全限定的 http、https 或 ftp URL。”这似乎违背了“允许空字符串”的想法。
    • 我不反对,忘记试了。它似乎工作!
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2020-06-20
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多