如何在ASP.NET Core中编辑后返回上一个上一个URL

时间:2017-01-09 14:02:34

标签: asp.net-core-1.0

我正在使用asp,net core并使用该教程创建排序,分页和搜索页面(索引)。一旦我从这个页面编辑一个项目,控制器总是将我转储回默认的索引页面。如何返回上一个URL。非常感谢。 这是我的控制器文件的一部分。

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(int id,  Bind("id,UserPassword,user")] UserProfiles userProfiles)
    {

        var users = from u in _context.UserProfiles
                    select u;
        if (id != userProfiles.id)
        {
            return NotFound();
        }

        if (ModelState.IsValid)
        {
            try
            {
                _context.Update(userProfiles);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!UserProfilesExists(userProfiles.id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
           // ***************
           // Redirect to the previous URL,i.e. the Index
            return Redirect(TempData["PreviousURL"].ToString()) ;

        }
        return View(userProfiles);

    }



 public async Task<IActionResult> Index(string sortOrder, string currentFilter, string searchString, int? page)
    {    
        ViewData["CurrentSort"] = sortOrder;

        ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
        // paging
        if (searchString != null)
        {
            page = 1;
        }
        else
        {
            searchString = currentFilter;
        }
       // search
        ViewData["CurrentFilter"] = searchString;
        var users = from u in _context.UserProfiles
                    select u;

        if (!String.IsNullOrEmpty(searchString))
        {
            users = users.Where(u => u.user.Contains(searchString)
                              );

        }
        //sort 
        switch (sortOrder)
        {
            case "name_desc":
                users = users.OrderByDescending(u => u.user);
                break;

            default:
                users = users.OrderBy(s => s.user);
                break;
        }
      // ***************
      // store the current path and query string in TempData["PreviousURL" session variable 
       TempData["PreviousURL"] = HttpContext.Request.Path.ToString() + HttpContext.Request.QueryString.ToString();

       return View(await PaginatedList<UserProfiles>.CreateAsync(users.AsNoTracking(), page ?? 1, pageSize));

    }

这是我的第一个MVC项目。

2 个答案:

答案 0 :(得分:0)

这取决于您在保存数据后控制器带您的逻辑。

保存数据时,需要将搜索,排序和分页相关数据传递给控制器​​。您可以将它们作为额外发布数据的一部分发送,作为查询字符串参数或作为正在发布的模型本身的一部分。

保存数据后,根据这些参数检索数据,并使用该分页,过滤和排序数据来扩展您的视图。

答案 1 :(得分:0)

我使用会话变量解决了我的问题:ViewData,ViewBag和TempData。以下两页非常有用:

https://www.codeproject.com/Articles/476967/What-is-ViewData-ViewBag-and-TempData-MVC-Option

http://andrewlock.net/an-introduction-to-session-storage-in-asp-net-core/

请参阅上面编辑的问题以获得解决方案。