我正在开发的第一个Razor-pages应用程序,所以我有点困惑。
当调用OnGet()函数时,会调用SpotifyAPI来获取当前用户的播放列表,并将它们赋给一个变量。然后需要根据OnPost()调用时UI上的选定值检查此变量。
问题是,当调用OnPost()时,PlaylistsToLook变量现在为空。
有没有办法保留两次调用之间的值?
这是cshtml.cs
public class CreateModel : PageModel
{
private readonly Models.AppDbContext _context;
public CreateModel(Models.AppDbContext context)
{
_context = context;
}
public void OnGet()
{
PlaylistsToLook = PlaylistRequestService.GetUserPlaylists(_context);
}
public void OnPost(string[] playlistsToLook)
{
foreach (var playlistId in playlistsToLook)
{
PlaylistRequest.PlaylistsToLook.Add(PlaylistsToLook.First(x => x.id.Equals(playlistId)));
}
_context.PlaylistRequests.Add(PlaylistRequest);
PlaylistRequestService.ProcessPlaylistRequest(PlaylistRequest, _context);
}
[BindProperty]
public List<SpotifyPlaylist> PlaylistsToLook { get ; set; }
[BindProperty]
public Models.PlaylistRequest PlaylistRequest { get; set; }
}这是cshtml
@page
@model SpotifyPlaylistCurator.Pages.PlaylistRequest.CreateModel
@{
ViewData["Title"] = "CreatePlaylist";
}
<h2>Create a Playlist</h2>
<form method="POST">
<div class="form-group">
<label asp-for="PlaylistRequest.Name" class="control-label"></label>
<input asp-for="PlaylistRequest.Name" class="form-control" />
</div>
<div class="form-group">
<label asp-for="PlaylistRequest.Duration" class="control-label"></label>
<input asp-for="PlaylistRequest.Duration" class="form-control" />
</div>
<div class="form-group">
<label asp-for="PlaylistRequest.PlaylistsToLook" class="control-label"></label>
@{
int cnt = 0;
foreach (var playlist in Model.PlaylistsToLook)
{
if (cnt++ % 3 == 0)
{
@:</tr><tr>
}
@:<td>
<input type="checkbox"
name="playlistsToLook"
value="@playlist.id" />
@playlist.name
@:</td>
}
}
</div>
<div></div>
<input type="submit" name="Create a Playlist" />
</form>发布于 2019-03-31 02:34:21
PageModel的TempData属性应该可以做到这一点。
默认情况下会启用基于cookie的版本,但如果列表大于500字节,则需要使用基于会话的版本:
public void ConfigureServices(IServiceCollection services)
{
// snip
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddSessionStateTempDataProvider();
services.AddSession();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// snip
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSession();
app.UseMvc();
}来源:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2#tempdata
https://stackoverflow.com/questions/55432021
复制相似问题