MatBlazor select 问题
MatBlazor select issue
我的代码应该是这样的,但是它出现空引用异常
<MatSelect Label="Atık Tipi" @bind-Value="@SecilenAtikGrubu.GrupId" Style="width:100%">
@foreach (var item in TumAtikTipleri)
{
<MatOption Value="@item.Id">@item.Deger1</MatOption>
}
</MatSelect>
但是当我这样使用时,它工作正常
<select class="mdc-select__native-control" @bind="SecilenAtikGrubu.GrupId">
@foreach (var item in TumAtikTipleri)
{
<option value="@item.Id">@item.Deger1</option>
}
</select>
绑定值 class 如下所示(SecilenAtikGrubu 和 TumAtikTipleri)
public class GrupKodlari : KayitBilgisi
{
[Key]
public int Id { get; set; }
public string Tur { get; set; }
public string Isim { get; set; }
public string Deger1 { get; set; }
public string Deger2 { get; set; }
public string Deger3 { get; set; }
public int? GrupId { get; set; }
public virtual GrupKodlari Grup { get; set; }
}
坏消息是,我已经检查过了,MatSelect 无法绑定到可为 null 的类型。
现在 好消息,第一个,您可以使用辅助 属性 作为解决方法,Try it at blazorfiddle.
public int GrupIdAux
{
set{
GrupId = (value==0?(int?)null:value);
}
get {
return (GrupId==null?0:GrupId.Value);
}
}
第二个好消息:MatBlazor 是一个开源项目。如果您需要使用可空类型,您 can improve MatSelect control and send a PR. The project owner is open to contributions (for example I wrote NumericUpDown) 如果您不能改进组件,您可以花钱请人为您编写它,或者您可以 post 在项目问题上请求新功能。看起来不错,绑定可为 null 的对象会很棒。
@daniherrera 您可以将 MatSelect
绑定到可为空的类型。但是,您必须指定您接受具有 ?
的可空类型。示例:
<MatSelect Label="Pick a Food Group" @bind-Value="@guidValue">
<MatOption TValue="Guid?" Value="@(null)"></MatOption>
<MatOption TValue="Guid?" Value="@(new Guid("20A82054-F493-4C7B-81A4-4F9A1EDD7C2E"))">Bread, Cereal, Rice, and Pasta</MatOption>
<MatOption TValue="Guid?" Value="@(new Guid("4451642D-24F7-418F-8741-BA5089A1CC65"))">Vegetables</MatOption>
<MatOption TValue="Guid?" Value="@(new Guid("5717DBBE-C205-4E33-9E07-892A51F64021"))">Fruit</MatOption>
</MatSelect>
<span>@guidValue</span>
@code
{
Guid? guidValue = new Guid("20A82054-F493-4C7B-81A4-4F9A1EDD7C2E");
}
https://www.matblazor.com/Select#MatSelectGuid
使用 int? Id
并用 TValue="int?"
标记您的 MatOption
。
我的解决方法是:
<MudSelect T="Genre?" Label="Genre Primary" @bind-Value="model.MainGenrePrimary" Variant="Variant.Outlined">
<MudSelectItem T="Genre?"></MudSelectItem>
@foreach (Genre item in Enum.GetValues(typeof(Genre)))
{
<MudSelectItem T="Genre?" Value="@item">@item</MudSelectItem>
}
</MudSelect>
我的代码应该是这样的,但是它出现空引用异常
<MatSelect Label="Atık Tipi" @bind-Value="@SecilenAtikGrubu.GrupId" Style="width:100%">
@foreach (var item in TumAtikTipleri)
{
<MatOption Value="@item.Id">@item.Deger1</MatOption>
}
</MatSelect>
但是当我这样使用时,它工作正常
<select class="mdc-select__native-control" @bind="SecilenAtikGrubu.GrupId">
@foreach (var item in TumAtikTipleri)
{
<option value="@item.Id">@item.Deger1</option>
}
</select>
绑定值 class 如下所示(SecilenAtikGrubu 和 TumAtikTipleri)
public class GrupKodlari : KayitBilgisi
{
[Key]
public int Id { get; set; }
public string Tur { get; set; }
public string Isim { get; set; }
public string Deger1 { get; set; }
public string Deger2 { get; set; }
public string Deger3 { get; set; }
public int? GrupId { get; set; }
public virtual GrupKodlari Grup { get; set; }
}
坏消息是,我已经检查过了,MatSelect 无法绑定到可为 null 的类型。
现在 好消息,第一个,您可以使用辅助 属性 作为解决方法,Try it at blazorfiddle.
public int GrupIdAux
{
set{
GrupId = (value==0?(int?)null:value);
}
get {
return (GrupId==null?0:GrupId.Value);
}
}
第二个好消息:MatBlazor 是一个开源项目。如果您需要使用可空类型,您 can improve MatSelect control and send a PR. The project owner is open to contributions (for example I wrote NumericUpDown) 如果您不能改进组件,您可以花钱请人为您编写它,或者您可以 post 在项目问题上请求新功能。看起来不错,绑定可为 null 的对象会很棒。
@daniherrera 您可以将 MatSelect
绑定到可为空的类型。但是,您必须指定您接受具有 ?
的可空类型。示例:
<MatSelect Label="Pick a Food Group" @bind-Value="@guidValue">
<MatOption TValue="Guid?" Value="@(null)"></MatOption>
<MatOption TValue="Guid?" Value="@(new Guid("20A82054-F493-4C7B-81A4-4F9A1EDD7C2E"))">Bread, Cereal, Rice, and Pasta</MatOption>
<MatOption TValue="Guid?" Value="@(new Guid("4451642D-24F7-418F-8741-BA5089A1CC65"))">Vegetables</MatOption>
<MatOption TValue="Guid?" Value="@(new Guid("5717DBBE-C205-4E33-9E07-892A51F64021"))">Fruit</MatOption>
</MatSelect>
<span>@guidValue</span>
@code
{
Guid? guidValue = new Guid("20A82054-F493-4C7B-81A4-4F9A1EDD7C2E");
}
https://www.matblazor.com/Select#MatSelectGuid
使用 int? Id
并用 TValue="int?"
标记您的 MatOption
。
我的解决方法是:
<MudSelect T="Genre?" Label="Genre Primary" @bind-Value="model.MainGenrePrimary" Variant="Variant.Outlined">
<MudSelectItem T="Genre?"></MudSelectItem>
@foreach (Genre item in Enum.GetValues(typeof(Genre)))
{
<MudSelectItem T="Genre?" Value="@item">@item</MudSelectItem>
}
</MudSelect>