如何正确重定向到asp.netcore中的页面

时间:2019-06-19 20:56:54

标签: asp.net-core razor

edit:项目背景。该项目是根据此处有关使用剃须刀页面https://docs.microsoft.com/en-us/aspnet/core/data/ef-rp/?view=aspnetcore-2.2进行数据访问的教程中的概念创建的。我没有执行视图或控制器,因此我目前没有任何可重定向到的操作。我需要添加一个控制器文件夹吗?

当我保存对模型subcategories的编辑更改时,我想回到categories页面。通常,使用简单的RedirectToPage("/index")就可以了。

这在这里不起作用,因为我的索引OnGet使用字符串ID来过滤subcategories(这似乎是我做错了……但它可以工作)。以下是我目前拥有的东西,它显然不起作用:

编辑-在岗:

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    _context.Attach(Subcategory).State = EntityState.Modified;

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!SubcategoryExists(Subcategory.SubcategoryId))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return RedirectToPage("./Index", "?id" , Subcategory.CategoryName);
}

索引- OnGet:

public async Task OnGetAsync(string id)
{
    title = id;

    Subcategory = await _context.Subcategory.ToListAsync();

    foreach (Subcategory item in Subcategory.ToList())
    {
        if (item.CategoryName != id)
        {
           Subcategory.Remove(item);
        }
    }

}

谁能告诉我如何正确地将我的编辑剃刀页面的OnPost路由到索引剃刀页面的OnGet

我尝试对处理程序进行一些研究,但是我找不到如何执行此操作的很好的定义。

2 个答案:

答案 0 :(得分:3)

由于只提供了方法,所以很难看到您在哪里挂了东西。

鉴于OnGetAsync(string id)如果映射到/index,则可以使用以下方式:

return RedirectToAction("Index", new { id = Subcategory.CategoryName.ToString() });

我还建议您将方法调用为与端点相同。因此,如果OnGetAsync是您的索引端点。然后将其命名为Index

希望这对您有所帮助,否则您需要向我提供更多代码。

答案 1 :(得分:0)

无需构建控制器即可解决问题的方法几乎就是克里斯蒂安·巴内(Kristian Barrnet)所说的:

   return RedirectToPage("./Index", new { id = Subcategory.CategoryName.ToString() });

但是,无论如何,我可能应该在这里添加一些控制器,以使它更有条理