2012-02-29 37 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");