Blazor EditForm 中的多个提交按钮?
Multiple submit buttons in Blazor EditForm?
使用 AspNet Blazor 及其 EditForm:
我正在创建一个应该包含更新和删除按钮的简单表单。我似乎没有找到任何有关如何将参数传递给提交的示例。
我试图在指向 DeleteObject 的删除按钮中放置一个 @onclick,但是我没有得到任何验证(在这种情况下我实际上不需要验证,但无论如何我都想这样做),加上删除后也调用了 SaveObject...
<EditForm Model="@selectedCar" OnValidSubmit="@SaveObject">
<DataAnnotationsValidator />
<ValidationSummary />
....My <InputText>'s for all values I have in my object
<button type="submit" class="btn btn-primary" value="Save">Spara</button>
<button type="submit" class="btn btn-primary" value="Delete">Delete</button>
</EditForm>
@code {
[Parameter]
public string Id { get; set; }
CarModel selectedCar;
protected override async Task OnInitializedAsync()
{
selectedCar = await _CarService.GetCar(int.Parse(Id));
}
protected async Task SaveObject()
{
selectedCar.Id = await _CarService.SaveCar(selectedCar);
}
protected async Task DeleteObject(int Id)
{
selectedCar.Id = await _CarService.DeleteCar(selectedCar);
}
}
我希望能够为每个按钮调用特定功能,而无需进行验证。
有人知道怎么做吗?
如果您使用 type="button"
,则只会调用 @onclick
方法,而不调用 OnValidSubmit
方法。但是这样就没有验证了。
好的,我最终得到了以下解决方案。它似乎按预期工作。
<EditForm Model="@selectedCar" Context="formContext">
<DataAnnotationsValidator />
<ValidationSummary />
....My <InputText>'s for all values I have in my object
<button type="submit" class="btn btn-primary" @onclick="@(() => SaveCar(formContext))">Save</button>
<button type="submit" class="btn btn-primary" @onclick="@(() => UpdateStockQuantity(formContext))">Update stock quantity</button>
<button type="submit" class="btn btn-secondary" @onclick="@(() => DeleteCar(formContext))">Delete</button>
</EditForm>
@code {
[Parameter]
public string Id { get; set; }
CarModel selectedCar;
protected override async Task OnInitializedAsync()
{
selectedCar = await _CarService.GetCar(int.Parse(Id));
}
protected async Task SaveCar(EditContext formContext)
{
bool formIsValid = formContext.Validate();
if (formIsValid == false)
return;
selectedCar.Id = await _CarService.SaveCar(selectedCar);
}
... plus same approach with UpdateStockQuantity and DeleteCar.
}
这两个按钮将提交带有验证的表单。
然后您可以检查布尔值并调用您想要的任何逻辑:
<EditForm Model="@Input" OnValidSubmit="@UpdateAsync">
<DataAnnotationsValidator />
<div class="row">
<div class="form-group col-md-12">
<label class="required"> Name</label>
<InputText class="form-control" @bind-Value="Input.Name" />
<span class="err"><ValidationMessage For="@(() => Input.Name)" /></span>
</div>
</div>
<div class="text-center">
<button type="submit" @onclick="@(()=> Input.IsNew = false)" class="btn">save 1</button>
<button type="submit" @onclick="@(()=> Input.IsNew = true)" class="btn">save 2</button>
</div>
</EditForm>
@code{
async Task UpdateAsync()
{
if (Input.IsNew)
{
//do somthing
}
else
{
//do another somthing
}
}
}
使用 AspNet Blazor 及其 EditForm: 我正在创建一个应该包含更新和删除按钮的简单表单。我似乎没有找到任何有关如何将参数传递给提交的示例。
我试图在指向 DeleteObject 的删除按钮中放置一个 @onclick,但是我没有得到任何验证(在这种情况下我实际上不需要验证,但无论如何我都想这样做),加上删除后也调用了 SaveObject...
<EditForm Model="@selectedCar" OnValidSubmit="@SaveObject">
<DataAnnotationsValidator />
<ValidationSummary />
....My <InputText>'s for all values I have in my object
<button type="submit" class="btn btn-primary" value="Save">Spara</button>
<button type="submit" class="btn btn-primary" value="Delete">Delete</button>
</EditForm>
@code {
[Parameter]
public string Id { get; set; }
CarModel selectedCar;
protected override async Task OnInitializedAsync()
{
selectedCar = await _CarService.GetCar(int.Parse(Id));
}
protected async Task SaveObject()
{
selectedCar.Id = await _CarService.SaveCar(selectedCar);
}
protected async Task DeleteObject(int Id)
{
selectedCar.Id = await _CarService.DeleteCar(selectedCar);
}
}
我希望能够为每个按钮调用特定功能,而无需进行验证。
有人知道怎么做吗?
如果您使用 type="button"
,则只会调用 @onclick
方法,而不调用 OnValidSubmit
方法。但是这样就没有验证了。
好的,我最终得到了以下解决方案。它似乎按预期工作。
<EditForm Model="@selectedCar" Context="formContext">
<DataAnnotationsValidator />
<ValidationSummary />
....My <InputText>'s for all values I have in my object
<button type="submit" class="btn btn-primary" @onclick="@(() => SaveCar(formContext))">Save</button>
<button type="submit" class="btn btn-primary" @onclick="@(() => UpdateStockQuantity(formContext))">Update stock quantity</button>
<button type="submit" class="btn btn-secondary" @onclick="@(() => DeleteCar(formContext))">Delete</button>
</EditForm>
@code {
[Parameter]
public string Id { get; set; }
CarModel selectedCar;
protected override async Task OnInitializedAsync()
{
selectedCar = await _CarService.GetCar(int.Parse(Id));
}
protected async Task SaveCar(EditContext formContext)
{
bool formIsValid = formContext.Validate();
if (formIsValid == false)
return;
selectedCar.Id = await _CarService.SaveCar(selectedCar);
}
... plus same approach with UpdateStockQuantity and DeleteCar.
}
这两个按钮将提交带有验证的表单。
然后您可以检查布尔值并调用您想要的任何逻辑:
<EditForm Model="@Input" OnValidSubmit="@UpdateAsync">
<DataAnnotationsValidator />
<div class="row">
<div class="form-group col-md-12">
<label class="required"> Name</label>
<InputText class="form-control" @bind-Value="Input.Name" />
<span class="err"><ValidationMessage For="@(() => Input.Name)" /></span>
</div>
</div>
<div class="text-center">
<button type="submit" @onclick="@(()=> Input.IsNew = false)" class="btn">save 1</button>
<button type="submit" @onclick="@(()=> Input.IsNew = true)" class="btn">save 2</button>
</div>
</EditForm>
@code{
async Task UpdateAsync()
{
if (Input.IsNew)
{
//do somthing
}
else
{
//do another somthing
}
}
}