MVC3动态返回URL

时间:2011-10-27 17:29:39

标签: asp.net-mvc-3

我希望有一个视图,其链接将设置为用户导航到此视图的任何页面的网址。

假设我有一个名为InfoPage的View和相对Action,在这个页面上我想要一个简单地说'Return'的链接。

如果用户在PageA上并导航到InfoPage,则单击“返回”链接会将用户返回到PageA。

如果用户在PageB上并导航到InfoPage,则单击“返回”链接会将用户返回到PageB。

我认为最简单的方法是将'ReturnUrl'添加为InfoPage中使用的模型的属性。

我的问题是如何获得该返回网址。

    public ViewResult InfoPage(){
       var model = new InfoPageModel(); 
       //Set my model's other properties here...
       model.ReturnUrl = ''//Where do I get this?
       return view(model);
    }

然后在我看来

    <a href="@Model.ReturnUrl">Return</a>

2 个答案:

答案 0 :(得分:1)

执行此操作的最有效方法是从调用方页面向查询字符串参数传递查询字符串参数。每个指向此页面的链接都需要传递自己的URL。 (Request.Url)。

您也可以在控件中使用Request.UrlReferrer,但并非所有浏览器都会发送Referer标题。

答案 1 :(得分:1)

在任何控制器操作中动态构造returnUrl:

var formCollection =
    new FormCollection
        {
            new FormCollection(this.HttpContext.Request.Form),
            new FormCollection(this.HttpContext.Request.QueryString)
        };

var parameters = new RouteValueDictionary();

formCollection.AllKeys
    .Select(k => new KeyValuePair<string, string>(k, formCollection[k])).ToList()
    .ForEach(p => parameters.Add(p.Key, p.Value));

var returnUrl =
    this.Url.Action(
        this.RouteData.Values["action"].ToString(),
        this.RouteData.Values["controller"].ToString(),
        parameters
    );

相关:How do I redirect to the previous action in ASP.NET MVC?(相同但在任何视图中)