我需要通过重定向来传递集合。但“RedirectToPage”仅通过 GET 请求发送。
还有另一种方式,通过重定向发送数据吗?
public class ListModel : PageModel
{
List<Entity> CreationResults = new List<Entity>();
if (Results.Any(x => x.Message == "Object was not created."))
{
foreach (var item in Results)
{
CreationResults.Add(item);
}
return RedirectToPage("CreateError", new { errorsList = Results });
}
}
我的目标页面处理程序:
public class CreateError : PageModel
{
public List<Entity> errorsList { get; set; }
public async Task<IActionResult> OnGetAsync(List<Entity> errorsList)
{
this.errorsList = errorsList;
return Page();
}
}
对于
RedirectToPage
,它包含以下贡献者:
public virtual RedirectToPageResult RedirectToPage(string pageName);
public virtual RedirectToPageResult RedirectToPage();
public virtual RedirectToPageResult RedirectToPage(object routeValues);
public virtual RedirectToPageResult RedirectToPage(string pageName, object routeValues);
public virtual RedirectToPageResult RedirectToPage(string pageName, string pageHandler, object routeValues);
public virtual RedirectToPageResult RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment);
public virtual RedirectToPageResult RedirectToPage(string pageName, string pageHandler, string fragment);
您可以传递数据的唯一参数是
routeValues
,但您不能将复杂对象作为路线数据传递。路由数据功能仅支持 int 和 string 等简单对象。如果你想跨请求保留更复杂的对象,你需要使用 Sessions
或 TempData
。
对于
TempData
,它使用Session,Session本身也使用IDistributedCache
。 IDistributedCache
没有能力接受对象或序列化对象。
这是工作演示,如下所示:
索引.cshtml.cs:
public IActionResult OnGet()
{
var model = new List<Entity>()
{
new Entity(){ error="aaa"},
new Entity(){ error="nbb"}
};
//for asp.net core 2.x,you could use NewtonSoft.Json -----JsonConvert.SerializeObject(model);
//this is for asp.net core 3.x by using System.Text.Json
TempData["errorsList"] = JsonSerializer.Serialize(model);
return RedirectToPage("CreateError");
}
CreateError.cshtml.cs:
public class CreateError : PageModel
{
public List<Entity> errorsList { get; set; }
public async Task<IActionResult> OnGetAsync()
{
var data = TempData["errorsList"] as string;
//for asp.net core 2.x ------JsonConvert.DeserializeObject<List<Entity>>(data)
//for asp.net core 3.x
this.errorsList = JsonSerializer.Deserialize<List<Entity>>(data);
return Page();
}
}