2012-02-29 63 views
1

在ASP.NET MVC 4应用程序中,我有一个带有分页列表的视图(只是一个简单的表,没有telerik网格或类似的东西)。当用户翻阅列表时,将从数据库中提取新值。ASP.NET MVC 4记住页面索引

在表格的每一行都有一个编辑按钮,点击按钮时,您将看到一个编辑视图,并且当您在该视图中单击保存时,您将被重定向回带有分页列表的视图。

列表视图中的URL看起来像这样

http://localhost/Items/Page/1 
http://localhost/Items/Page/2 

的路线是这样的

routes.MapRoute(
     name: "ItemsList", 
     url :"Items/Page/{page}", 
     defaults: new { controller = "Items", action = "Index", page = 1 }, 
      constraints: new {page = @"\d+"} 
     ); 

我的问题是:什么是存储掉指的首选,最常用的方法所以当完成编辑项目时,我可以将用户重定向回正确的URL

http://localhost/Items/Page/2 

而不仅仅是

http://localhost/Items 

我试图分裂

Request.UrlReferrer.PathAndQuery 

和周围存储这些值,然后建立从这些值的网址,但我有一种感觉,有一个更好的解决方案解决这个问题。有什么建议么?

更新

现在,我想,我可以把UrlReferrer.PathAndQuery(如果有任何值)作为对编辑画面视图模型的属性,然后使用决定时保存后重定向的位置。

有没有想过那种方法呢?

+0

分页列表是唯一进入编辑页面的方式吗?你会回到其他控制器/动作吗? – 2012-03-03 02:25:22

+0

是的,您可以从应用程序中的多个位置进入编辑屏幕。 – Pelle 2012-03-03 06:43:30

回答

1

这是我对问题的最终解决方案,它不是超优雅的,但它的工作原理。 我添加了一个属性到视图模型,可以存储的URL。该值被存储在隐藏字段中。

public class SkillEditModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string RedirectBackToUrl { get; set; } 
} 

在控制器编辑(GET)方法我值存储与视图模型

if (!Request.UrlReferrer == null) 
{ 
    model.RedirectBackToUrl = Request.UrlReferrer.PathAndQuery; 
} 

最后保存在编辑(POST)的变化后,我做了这个

if (!string.IsNullOrWhiteSpace(model.RedirectBackToUrl)) 
{ 
    return new RedirectResult(model.RedirectBackToUrl); 
} 

return RedirectToAction("Index");