【问题标题】:how to properly redirect to page in asp.netcore如何正确重定向到asp.net核心中的页面
【发布时间】:2019-06-19 20:56:54
【问题描述】:

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

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

这在这里不起作用,因为我的索引 OnGet 使用字符串 ID 来过滤 subcategories(感觉好像我可能做错了......但它有效)。以下是我目前拥有的,它显然不起作用:

编辑 - OnPost:

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

我尝试对处理程序进行一些研究,但我找不到一个很好理解的定义来说明如何做到这一点。

【问题讨论】:

    标签: asp.net-core razor


    【解决方案1】:

    由于您只提供了方法,因此很难看到您在哪里连接了东西。

    鉴于OnGetAsync(string id) 如果映射到/index,您可以使用类似:

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

    我还建议您调用与端点相同的方法。因此,如果 OnGetAsync 是您的索引端点。那就叫它Index

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

    【讨论】:

    • /index 是我重定向到的剃须刀页面。我目前没有使用 mvc ergo 我没有任何操作?
    • @SamuelWakeman 据我所知,RedirectToPage 来自 MVC 框架? docs.microsoft.com/en-us/dotnet/api/… 如果不是这样。您可以编辑您的问题以包含您使用的框架类型吗?我现在在没有这些信息的情况下在黑暗中拍摄。
    • 嗯...我猜是吗?但我目前没有控制器和操作,我应该添加一个吗?
    • @SamuelWakeman 如果您想使用剃刀视图,我建议您遵循 MVC 框架的模式。这为您简化了很多这些过程,并且更容易查看绑定(所有这些都将在编译时检查)。所以是的,我认为使用控制器会让你自己更轻松。
    【解决方案2】:

    在不构建控制器的情况下解决问题的方法与 Kristian Barrnet 所说的差不多:

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

    不过,我可能还是应该在此处添加一些控制器以使其更有条理

    【讨论】:

      猜你喜欢
      • 2019-02-17
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多