【问题标题】:How to accept a Guid as an input type in Blazor Server如何在 Blazor Server 中接受 Guid 作为输入类型
【发布时间】:2022-09-02 13:48:10
【问题描述】:

我有一个应用程序,我试图在其中创建以下类型的记录:

public class ObfuscatingTradeDatum
{
    public int Id { get; set; }
    [Required]
    public string ProviderName { get; set; }
    [Required]
    public string ClientNameAsAppearsOnTradeData { get; set; }
    [Required]
    public string ClientCode { get; set; }
    [Required]
    public Guid ProviderDynamicsId { get; set; }
    [Required]
    public Guid TraderDynamicsId { get; set; }
}

我的 blazor 页面形式如下:

<EditForm Model=\"@ObfuscatingTradeData\" OnValidSubmit=\"@HandleValidSubmit\">
<DataAnnotationsValidator />
<div class=\"form-group\">
    <label>Provider Name:</label>
    <div>
        <InputText @bind-Value=\"@ObfuscatingTradeData.ProviderName\" />
        <ValidationMessage For=\"@(() => ObfuscatingTradeData.ProviderName)\" />
    </div>
</div>
<div class=\"form-group \">
    <div>
        <label>Client Name:</label>
        <div>
            <InputText @bind-Value=\"@ObfuscatingTradeData.ClientNameAsAppearsOnTradeData\" />
            <ValidationMessage For=\"@(() => ObfuscatingTradeData.ClientNameAsAppearsOnTradeData)\" />
        </div>
    </div>
</div>
<div class=\"form-group \">
    <div>
        <label>Client Code:</label>
        <div>
            <InputText @bind-Value=\"@ObfuscatingTradeData.ClientCode\" />
            <ValidationMessage For=\"@(() => ObfuscatingTradeData.ClientCode)\" />
        </div>
    </div>
</div>
<div class=\"form-group \">
    <div>
        <label>Provider Dynamics ID:</label>
        <div>
            <input type=\"text\" @bind=\"@ObfuscatingTradeData.ProviderDynamicsId\" />
            <ValidationMessage For=\"@(() => ObfuscatingTradeData.ProviderDynamicsId)\" />
        </div>
    </div>
</div>
<div class=\"form-group \">
    <div>
        <label>Trader Dynamics ID:</label>
        <div>
            <input type=\"text\" @bind=\"@ObfuscatingTradeData.TraderDynamicsId\" />
            <ValidationMessage For=\"@(() => ObfuscatingTradeData.TraderDynamicsId)\" />
        </div>
    </div>
</div>
<button type=\"submit\" class=\"btn btn-success\">@ButtonText</button>
@code {
    public ObfuscatingTradeDatum ObfuscatingTradeData = new ObfuscatingTradeDatum();
    [Parameter] public string ButtonText { get; set; } = \"Save\";
    private void HandleValidSubmit() => Service.InsertObfuscatingTradeDatum(ObfuscatingTradeData);
}

我的问题发生在这一行:

<input @bind=\"@ObfuscatingTradeData.TraderDynamicsId\" />

我想要的是使用一个接受 Guids 的输入组件,这样我就可以获得免费的内置验证。但是,以下代码会引发错误 \"The type \'System.Guid\' is not a supported numeric type.\":

<InputNumber @bind-Value=\"@ObfuscatingTradeData.TraderDynamicsId\" />

这个错误是有道理的,但是从我所做的搜索来看,我不确定如何将 guid 作为输入传递。任何帮助将不胜感激。

非常感谢,

  • 使用inputText
  • 这会产生“无法从 System.Guid 转换为字符串”的编译错误
  • 你试过解决方案了吗?
  • 不幸的是,以下解决方案会导致实体框架出现更多问题。这种方法对我来说有点“Hacky”,感觉应该有一个更受支持的解决方案来解决我的问题
  • 不可能,我测试了!,它工作正常,我认为你还有另一个问题,请参阅BlazorFiddle 中的解决方案

标签: c# html web-component blazor-server-side


【解决方案1】:

我不确定,但你可以这样做:

public class ObfuscatingTradeDatum
{
  //....
  public string ProviderDynamicsIdAsString { get; set; }
  [Required]
  public Guid ProviderDynamicsId
  {
    get { return Guid.TryParse(ProviderDynamicsIdAsString, out Guid g) ? g : default; }
    set { ProviderDynamicsIdAsString = Convert.ToString(value); }
  }
  public string TraderDynamicsIdAsString { get; set; }
  [Required]
  public Guid TraderDynamicsId
  {
    get { return Guid.TryParse(TraderDynamicsIdAsString, out Guid g) ? g : default; }
    set { TraderDynamicsIdAsString = Convert.ToString(value); }
  }
}

然后:

<InputText id="name" @bind-Value="ObfuscatingTradeData.TraderDynamicsIdAsString " />
<span>@ObfuscatingTradeData.TraderDynamicsId.ToString()</span>

您可以在BlazorFiddle 中查看示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    相关资源
    最近更新 更多