C# 使用异步时无法清除模式
我正在使用Blazor框架 我有一个EntryForm,用于在运行时生成几个文本框C# 使用异步时无法清除模式,c#,asp.net-core,blazor,blazor-server-side,C#,Asp.net Core,Blazor,Blazor Server Side,我正在使用Blazor框架 我有一个EntryForm,用于在运行时生成几个文本框 <!-- Input fields --> @for (var i = 0; i < 6; i++) { var index = i; <div class="form-row"> <div class="col-sm-8" style="float:left">
<!-- Input fields -->
@for (var i = 0; i < 6; i++)
{
var index = i;
<div class="form-row">
<div class="col-sm-8" style="float:left">
<div class="justify-content-center mb-2">
<input type="text" class="form-control form-control-sm border border-secondary" @bind="myMod.Code[index]" />
</div>
</div>
<div class="col-sm-4" style="float:left">
<div class="justify-content-center mb-2">
<input type="text" class="form-control form-control-sm border border-secondary" @bind="myMod.Weight[index]" @bind:event="oninput" />
</div>
</div>
<div/>
}
它不会清除模型,因此保存后,字段将保留以前输入的值
如何清除模型,从而清除所有字段?您不必等待任务。Run()。这意味着在重新分配myMod之前,属于ButtonClick的渲染已经在运行 但是更好的选择是根本不使用Task.Run()
异步任务保存()
{
...
if()
{
//运行(异步()=>wait ConfirmSave());
等待确认保存();
myMod=新的StudentModel();
}
其他的
//运行(async()=>wait CreateFile());
等待CreateFile();
}
非常感谢。成功了。唯一的问题是,如果我不想将另存为异步,只想调用ConfirmSave,那么选项是什么?为什么不异步?Blazor对此非常支持:@onclick=“Save”
就是您所需要的一切。您确实需要一个异步任务
顶级方法。因为从SAVE方法我也可以调用非异步方法。虽然这些都是通过调用async ConfirmSave来实现的,但我想确保它们将来不会崩溃,将来也不会崩溃。在可以的时间和地点使事情异步。确保您拥有完整的等待“链”,并将“缺少等待”和“未等待”警告视为错误。并且不要使用Task.Run()。
@code {
private StudentModel myMod= new StudentModel();
private void Save()
{
bool askUser = ValidateEntry();
if (askUser)
{
Task.Run(async () => await ConfirmSave());
myMod = new StudentModel();
}
else
Task.Run(async () => await CreateFile());
}
async Task ConfirmSave()
{
bool confirmed = await JsRuntime.InvokeAsync<bool>("confirm", $"Are you sure?");
if (confirmed)
{
await CreateFile();
}
}
}
myMod = new StudentModel()