在 ASP.NET 核心中编辑后如何 return 排在上一个 URL 之后
How to return top previous URL after Edit in ASP.NET Core
我正在使用 asp,net core 并使用教程创建了排序、分页和搜索页面(索引)。一旦我从此页面编辑项目,控制器总是将我转储到默认索引页面。我怎么return到以前的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 项目。
保存数据后控制器带你去哪里取决于你的逻辑。
保存数据时需要将搜索、排序、分页相关的数据传递给controller。您可以将它们作为额外 post 数据的一部分、作为查询字符串参数或作为正在 posted 的模型本身的一部分发送。
保存数据后,根据这些参数检索数据,并使用分页、过滤和排序的数据填充您的视图。
我使用会话变量解决了我的问题: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/
请参阅上面编辑过的问题以获取解决方案。
我正在使用 asp,net core 并使用教程创建了排序、分页和搜索页面(索引)。一旦我从此页面编辑项目,控制器总是将我转储到默认索引页面。我怎么return到以前的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 项目。
保存数据后控制器带你去哪里取决于你的逻辑。
保存数据时需要将搜索、排序、分页相关的数据传递给controller。您可以将它们作为额外 post 数据的一部分、作为查询字符串参数或作为正在 posted 的模型本身的一部分发送。
保存数据后,根据这些参数检索数据,并使用分页、过滤和排序的数据填充您的视图。
我使用会话变量解决了我的问题: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/
请参阅上面编辑过的问题以获取解决方案。