2017-01-09 7 views
0

Я использую asp, net core и использовал учебник для создания отсортированной, выгружаемой страницы и страницы поиска (Index). Как только я редактирую элемент с этой страницы, контроллер всегда возвращает меня на страницу индекса по умолчанию. Как вернуться к предыдущему URL. Большое спасибо. Вот раздел моего файла контроллера.Как вернуть верхний предыдущий URL-адрес после редактирования в ASP.NET Core

[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.

ответ

0

Это зависит от вашей логики, когда контроллер берет вас после сохранения данных.

При сохранении данных вам необходимо передать поиск, сортировку и поиск персональных данных. Вы можете отправить их как часть дополнительных данных сообщения, в качестве параметров строки запроса или как часть самой модели, которая публикуется.

После сохранения данных извлекайте данные на основе этих параметров и настройте свой просмотр с помощью выгружаемых, фильтрованных и отсортированных данных.

+0

Я исправил свой первоначальный пост с помощью некоторой логики контроллера. Есть ли у вас примеры того, как вы можете отправлять и извлекать данные сортировки, поиска и поиска? Благодарю. – DeDeCode

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/

Пожалуйста, смотрите отредактированный вопрос выше для решения.