问题描述
我正在将我的应用程序从 MVC(不是 Razorpages)迁移到 Blazor。迁移标记和模型非常简单。
但是,我将如何迁移控制器操作?例如,我有一个有 2 个动作的控制器:
[HttpGet]
[AllowAnonymous]
public IActionResult Register(string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(Registerviewmodel model,string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email,Email = model.Email };
var result = await _userManager.CreateAsync(user,model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user,isPersistent: false);
return RedirectToLocal(returnUrl);
}
AddErrors(result);
}
return View(model);
}
如何将上述操作迁移到 Blazor?
解决方法
您提供的代码用于注册用户,也许您可以考虑在 Blazor 服务器端应用程序中使用 Scaffold Identity 页面(它将使用 razor 页面,而不是 Blazor 组件)。然后,使用这些页面来管理用户和角色。
如果您不想使用脚手架标识页面,而想自己创建 Blazor 组件,您可以创建一个 Register 组件,然后在 @code
块中编写组件逻辑和事件处理。查看以下文章:
Create and use ASP.NET Core Razor components
ASP.NET Core Blazor forms and validation
如果您想在表单验证后导航到另一个页面,您可以使用 NavigationManager.NavigateTo()
方法重定向到另一个页面,代码如下:
@page "/fetchdata"
@using BlazorApp3.Data
@inject WeatherForecastService ForecastService
@inject NavigationManager NavigationManager
<div>
@*display records in the web page*@
</div>
<button class="btn btn-primary" @onclick="submit">
Submit
</button>
@code {
private WeatherForecast[] forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
}
private void submit(MouseEventArgs e)
{
NavigationManager.NavigateTo("/counter");
}
}