Saya menggunakan kerangka kerja Blazor.

Saya memiliki EntryForm yang digunakan untuk menghasilkan beberapa kotak teks saat run-time.

<!-- 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/>
}

Ada dua tombol setelah kontrol ini, SIMPAN dan TUTUP.

Ketika pengguna mengklik Simpan, saya memiliki persyaratan untuk mengonfirmasi dari pengguna. Jadi saya menambahkan kode di bawah ini:

@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();
        }
    }
}

Ketika saya tidak meminta konfirmasi menggunakan metode ConfirmSave async, saya dapat menghapus model hanya dengan mengaktifkannya kembali. Tetapi sekarang bahkan jika saya melakukannya:

myMod = new StudentModel()

Itu tidak menghapus model dan karena itu setelah SAVE, bidang mempertahankan nilai yang dimasukkan sebelumnya.

Bagaimana cara menghapus model dan dengan demikian semua bidang?

1
RKh 25 Mei 2021, 15:06

1 menjawab

Jawaban Terbaik

Anda tidak menunggu Task.Run(). Itu berarti rendering milik ButtonClick sudah berjalan sebelum Anda menetapkan ulang myMod.

Tetapi opsi yang lebih baik adalah tidak menggunakan Task.Run() sama sekali.

async Task Save()
{
   ...
   if()
   {
      //Task.Run(async () => await ConfirmSave());
      await ConfirmSave();
      myMod = new StudentModel();
   } 
   else
     //Task.Run(async () => await CreateFile());
     await CreateFile();
}
1
Henk Holterman 25 Mei 2021, 12:17