我认为在您的情况下,正确的方法是通过某种服务保留实际价值,以便在 Post 请求中也可以访问它:
public interface ICacheService
{
Dictionary<string, object> Values { get; set; }
}
public class CacheService : ICacheService
{
public Dictionary<string, object> Values { get; set; } = new Dictionary<string, object>();
}
您还应该在 Startup.cs 文件中注册该服务:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<ICacheService, CacheService>(); // or Scoped depending on your needs
...
]
然后您可以轻松地使用您的代码使用此类服务:
public class SocketGuildModel : PageModel
{
public ICacheService Cache { get; set; }
public SocketGuildModel(ICacheService cache)
{
Cache = cache;
}
public async Task OnGet()
{
Cache.Values["guild"] = GetGuild();
await Task.CompletedTask;
}
public async Task OnPost()
{
Console.WriteLine("Post Received");
await Task.CompletedTask;
}
public static SocketGuild GetGuild() => new SocketGuild();
}
public class SocketGuild
{
public List<string> Roles { get; set; } = new List<string>();
}
@page
@using RazorPagesDemo.Services
@model RazorPagesDemo.Pages.SocketGuildModel
<form method="post" class="mt-3">
@{
var guild = (SocketGuild)Model.Cache.Values["guild"];
}
<p>The guild has @(guild.Roles.Count) roles.</p>
<button class="btn btn-primary" type="submit">Post</button>
</form>
话虽如此,根据您的确切需求,您还可以在.cshtml 文件中添加if ... else ... 逻辑并在条件后面进行门渲染(这可能是bool IsPost 在OnGet 和OnPost 你的方法 Page Model 例如)。