Blazor 服务器端 InputSelect for byte 数据类型,onChange 事件错误
Blazor server-side InputSelect for byte data-type, onChange event error
我正在使用 ASP.NET Core 3.1,Blazor 服务器端。我在 https://docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-3.1
关注文档
@page "/add_fileset"
@inject Foo.Data.ApplicationDbContext Db
<div>
<a href="/fileset">Danh sách</a>
</div>
<div>
<EditForm Model="@model" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group row">
<label for="FileName" class="col-sm-2 col-form-label">Tên File: </label>
<div class="col-sm-10">
<input type="text" id="FileName" @bind-value="model.FileName" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="PriorityLevel" class="col-sm-2 col-form-label">Mức ưu tiên: </label>
<div class="col-sm-10">
@*<input type="number" id="PriorityLevel" @bind-value="model.PriorityLevel" class="form-control" />*@
<InputSelect id="PriorityLevel" @bind-Value="model.PriorityLevel" class="form-control">
<option>Chọn...</option>
<option value=1>Rất quan trọng</option>
<option value=2>Quan trọng</option>
<option value=3>Bình thường</option>
<option value=4>Ít quan trọng</option>
</InputSelect>
</div>
</div>
<div class="form-group row">
<label for="StatusCode" class="col-sm-2 col-form-label">Mã trạng thái: </label>
<div class="col-sm-10">
<input type="number" id="StatusCode" @bind-value="model.StatusCode" class="form-control" />
</div>
</div>
@*<div class="form-group row">
<label for="StatusCode2" class="col-sm-2 col-form-label">Loại hồ sơ: </label>
<div class="col-sm-10">
<input type="number" id="StatusCode2" class="form-control" />
</div>
</div>*@
<button type="submit" class="btn btn-primary">Lưu</button>
</EditForm>
</div>
@code {
public class AddFiletSetPageModel
{
public string FileName { get; set; }
public decimal? CreatorId { get; set; }
public DateTime? Created { get; set; }
public decimal? ModifierId { get; set; }
public DateTime? Modified { get; set; }
public byte? PriorityLevel { get; set; }
public byte? StatusCode { get; set; }
}
private AddFiletSetPageModel model = new AddFiletSetPageModel();
private void HandleValidSubmit()
{
FileSet fileItem = new FileSet
{
FileName = model.FileName,
CreatorId = model.CreatorId,
Created = DateTime.Now,
PriorityLevel = model.PriorityLevel,
StatusCode = model.StatusCode
};
Db.FileSet.Add(fileItem);
Db.SaveChanges();
}
}
关注这些代码行
<InputSelect id="PriorityLevel" @bind-Value="model.PriorityLevel" class="form-control">
<option>Chọn...</option>
<option value=1>Rất quan trọng</option>
<option value=2>Quan trọng</option>
<option value=3>Bình thường</option>
<option value=4>Ít quan trọng</option>
</InputSelect>
点击下拉列表时,控制台报错
[2019-12-27T08:58:22.819Z] Error: System.InvalidOperationException: Microsoft.AspNetCore.Components.Forms.InputSelect`1[System.Nullable`1[System.Byte]] does not support the type 'System.Nullable`1[System.Byte]'.
at Microsoft.AspNetCore.Components.Forms.InputSelect`1.TryParseValueFromString(String value, TValue& result, String& validationErrorMessage)
at Microsoft.AspNetCore.Components.Forms.InputBase`1.set_CurrentValueAsString(String value)
at Microsoft.AspNetCore.Components.Forms.InputSelect`1.<BuildRenderTree>b__4_0(String __value)
at Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensions.<>c__DisplayClass22_0`1.<CreateBinderCore>b__0(ChangeEventArgs e)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle) blazor.server.js:15:27309
log https://localhost:44348/_framework/blazor.server.js:15
C https://localhost:44348/_framework/blazor.server.js:8
S https://localhost:44348/_framework/blazor.server.js:8
invokeClientMethod https://localhost:44348/_framework/blazor.server.js:1
invokeClientMethod https://localhost:44348/_framework/blazor.server.js:1
processIncomingData https://localhost:44348/_framework/blazor.server.js:1
onreceive https://localhost:44348/_framework/blazor.server.js:1
onmessage https://localhost:44348/_framework/blazor.server.js:1
(Async: EventHandlerNonNull)
connect https://localhost:44348/_framework/blazor.server.js:1
connect https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
L https://localhost:44348/_framework/blazor.server.js:1
L https://localhost:44348/_framework/blazor.server.js:1
connect https://localhost:44348/_framework/blazor.server.js:1
startTransport https://localhost:44348/_framework/blazor.server.js:1
createTransport https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
createTransport https://localhost:44348/_framework/blazor.server.js:1
startInternal https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
a https://localhost:44348/_framework/blazor.server.js:1
(Async: promise callback)
c https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
startInternal https://localhost:44348/_framework/blazor.server.js:1
start https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
start https://localhost:44348/_framework/blazor.server.js:1
startInternal https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
v https://localhost:44348/_framework/blazor.server.js:1
v https://localhost:44348/_framework/blazor.server.js:1
startInternal https://localhost:44348/_framework/blazor.server.js:1
startWithStateTransitions https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
v https://localhost:44348/_framework/blazor.server.js:1
v https://localhost:44348/_framework/blazor.server.js:1
startWithStateTransitions https://localhost:44348/_framework/blazor.server.js:1
start https://localhost:44348/_framework/blazor.server.js:1
S https://localhost:44348/_framework/blazor.server.js:8
s https://localhost:44348/_framework/blazor.server.js:8
s https://localhost:44348/_framework/blazor.server.js:8
r https://localhost:44348/_framework/blazor.server.js:8
r https://localhost:44348/_framework/blazor.server.js:8
S https://localhost:44348/_framework/blazor.server.js:8
E https://localhost:44348/_framework/blazor.server.js:8
s https://localhost:44348/_framework/blazor.server.js:8
s https://localhost:44348/_framework/blazor.server.js:8
r https://localhost:44348/_framework/blazor.server.js:8
r https://localhost:44348/_framework/blazor.server.js:8
E https://localhost:44348/_framework/blazor.server.js:8
<anonymous> https://localhost:44348/_framework/blazor.server.js:8
n https://localhost:44348/_framework/blazor.server.js:1
<anonymous> https://localhost:44348/_framework/blazor.server.js:1
<anonymous> https://localhost:44348/_framework/blazor.server.js:1
如何解决?
当用户选择 "<option ...value=1 ...>"
等选项时,InputSelect
的值是 string
"1"
而不是 int
1
。这就是它抛出的原因。
快速解决方法是将 PriorityLevel
的类型更改为 string
我正在使用 ASP.NET Core 3.1,Blazor 服务器端。我在 https://docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-3.1
关注文档@page "/add_fileset"
@inject Foo.Data.ApplicationDbContext Db
<div>
<a href="/fileset">Danh sách</a>
</div>
<div>
<EditForm Model="@model" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group row">
<label for="FileName" class="col-sm-2 col-form-label">Tên File: </label>
<div class="col-sm-10">
<input type="text" id="FileName" @bind-value="model.FileName" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="PriorityLevel" class="col-sm-2 col-form-label">Mức ưu tiên: </label>
<div class="col-sm-10">
@*<input type="number" id="PriorityLevel" @bind-value="model.PriorityLevel" class="form-control" />*@
<InputSelect id="PriorityLevel" @bind-Value="model.PriorityLevel" class="form-control">
<option>Chọn...</option>
<option value=1>Rất quan trọng</option>
<option value=2>Quan trọng</option>
<option value=3>Bình thường</option>
<option value=4>Ít quan trọng</option>
</InputSelect>
</div>
</div>
<div class="form-group row">
<label for="StatusCode" class="col-sm-2 col-form-label">Mã trạng thái: </label>
<div class="col-sm-10">
<input type="number" id="StatusCode" @bind-value="model.StatusCode" class="form-control" />
</div>
</div>
@*<div class="form-group row">
<label for="StatusCode2" class="col-sm-2 col-form-label">Loại hồ sơ: </label>
<div class="col-sm-10">
<input type="number" id="StatusCode2" class="form-control" />
</div>
</div>*@
<button type="submit" class="btn btn-primary">Lưu</button>
</EditForm>
</div>
@code {
public class AddFiletSetPageModel
{
public string FileName { get; set; }
public decimal? CreatorId { get; set; }
public DateTime? Created { get; set; }
public decimal? ModifierId { get; set; }
public DateTime? Modified { get; set; }
public byte? PriorityLevel { get; set; }
public byte? StatusCode { get; set; }
}
private AddFiletSetPageModel model = new AddFiletSetPageModel();
private void HandleValidSubmit()
{
FileSet fileItem = new FileSet
{
FileName = model.FileName,
CreatorId = model.CreatorId,
Created = DateTime.Now,
PriorityLevel = model.PriorityLevel,
StatusCode = model.StatusCode
};
Db.FileSet.Add(fileItem);
Db.SaveChanges();
}
}
关注这些代码行
<InputSelect id="PriorityLevel" @bind-Value="model.PriorityLevel" class="form-control">
<option>Chọn...</option>
<option value=1>Rất quan trọng</option>
<option value=2>Quan trọng</option>
<option value=3>Bình thường</option>
<option value=4>Ít quan trọng</option>
</InputSelect>
点击下拉列表时,控制台报错
[2019-12-27T08:58:22.819Z] Error: System.InvalidOperationException: Microsoft.AspNetCore.Components.Forms.InputSelect`1[System.Nullable`1[System.Byte]] does not support the type 'System.Nullable`1[System.Byte]'.
at Microsoft.AspNetCore.Components.Forms.InputSelect`1.TryParseValueFromString(String value, TValue& result, String& validationErrorMessage)
at Microsoft.AspNetCore.Components.Forms.InputBase`1.set_CurrentValueAsString(String value)
at Microsoft.AspNetCore.Components.Forms.InputSelect`1.<BuildRenderTree>b__4_0(String __value)
at Microsoft.AspNetCore.Components.EventCallbackFactoryBinderExtensions.<>c__DisplayClass22_0`1.<CreateBinderCore>b__0(ChangeEventArgs e)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle) blazor.server.js:15:27309
log https://localhost:44348/_framework/blazor.server.js:15
C https://localhost:44348/_framework/blazor.server.js:8
S https://localhost:44348/_framework/blazor.server.js:8
invokeClientMethod https://localhost:44348/_framework/blazor.server.js:1
invokeClientMethod https://localhost:44348/_framework/blazor.server.js:1
processIncomingData https://localhost:44348/_framework/blazor.server.js:1
onreceive https://localhost:44348/_framework/blazor.server.js:1
onmessage https://localhost:44348/_framework/blazor.server.js:1
(Async: EventHandlerNonNull)
connect https://localhost:44348/_framework/blazor.server.js:1
connect https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
L https://localhost:44348/_framework/blazor.server.js:1
L https://localhost:44348/_framework/blazor.server.js:1
connect https://localhost:44348/_framework/blazor.server.js:1
startTransport https://localhost:44348/_framework/blazor.server.js:1
createTransport https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
createTransport https://localhost:44348/_framework/blazor.server.js:1
startInternal https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
a https://localhost:44348/_framework/blazor.server.js:1
(Async: promise callback)
c https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
startInternal https://localhost:44348/_framework/blazor.server.js:1
start https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
B https://localhost:44348/_framework/blazor.server.js:1
start https://localhost:44348/_framework/blazor.server.js:1
startInternal https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
v https://localhost:44348/_framework/blazor.server.js:1
v https://localhost:44348/_framework/blazor.server.js:1
startInternal https://localhost:44348/_framework/blazor.server.js:1
startWithStateTransitions https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
s https://localhost:44348/_framework/blazor.server.js:1
v https://localhost:44348/_framework/blazor.server.js:1
v https://localhost:44348/_framework/blazor.server.js:1
startWithStateTransitions https://localhost:44348/_framework/blazor.server.js:1
start https://localhost:44348/_framework/blazor.server.js:1
S https://localhost:44348/_framework/blazor.server.js:8
s https://localhost:44348/_framework/blazor.server.js:8
s https://localhost:44348/_framework/blazor.server.js:8
r https://localhost:44348/_framework/blazor.server.js:8
r https://localhost:44348/_framework/blazor.server.js:8
S https://localhost:44348/_framework/blazor.server.js:8
E https://localhost:44348/_framework/blazor.server.js:8
s https://localhost:44348/_framework/blazor.server.js:8
s https://localhost:44348/_framework/blazor.server.js:8
r https://localhost:44348/_framework/blazor.server.js:8
r https://localhost:44348/_framework/blazor.server.js:8
E https://localhost:44348/_framework/blazor.server.js:8
<anonymous> https://localhost:44348/_framework/blazor.server.js:8
n https://localhost:44348/_framework/blazor.server.js:1
<anonymous> https://localhost:44348/_framework/blazor.server.js:1
<anonymous> https://localhost:44348/_framework/blazor.server.js:1
如何解决?
当用户选择 "<option ...value=1 ...>"
等选项时,InputSelect
的值是 string
"1"
而不是 int
1
。这就是它抛出的原因。
快速解决方法是将 PriorityLevel
的类型更改为 string