如何从 MVC 迁移到 Blazor 服务器端?

问题描述

我正在将我的应用程序从 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");
    }
}