从共享页面返回呼叫页面

时间:2009-07-06 16:39:53

标签: asp.net-mvc navigation

我的ASP.NET MVC应用程序中有一个共享页面,可以从我的应用程序中的几个不同页面访问。如果我希望用户在共享页面上完成业务后返回原始页面,那么找出用户所在位置的最佳方法是什么,并告诉应用程序去那里?

请注意,我现在正在为共享页面上的“取消”按钮执行此操作,方法是告诉onclick使用页面历史记录:

<input type="button" value="Cancel" onclick="if (history.length == 0) { window.location='<%=Url.Action("Index", "Home") %>' } else {  history.back() }" />

但如果共享页面更新原始页面上显示的数据,则无法保存。

3 个答案:

答案 0 :(得分:2)

尝试使用:

System.Web.HttpContext.Current.Request.UrlReferrer

http://msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx

答案 1 :(得分:1)

我能想到的两种方法是将调用页面的url存储在隐藏的输入元素中,或者作为当前页面地址中的参数。这些都可以在刷新或几个导航步骤中存活,您只需要确保将变量传递到下一页。

答案 2 :(得分:0)

这样的问题就是为什么我越来越多地考虑使用BaseViewModel类继承我的所有视图模型来存储可能对任何给定页面有用的信息。我最近一直试图想出一个完整的类定义,但是出于这些目的,拥有以下属性可能会很好(在一个不同的问题的答案中发布了部分内容,我会找到一个链接)位):

public class BaseModel
{
    public string PageTitle { get; set; }
    public string PageDescription { get; set; }
    public string PageKeywords { get; set; } //maybe use a List<string> or string[] here
    public string ReturnPage { get; set; }
    //TBD: any other useful HTML page elements 
}

然后我可以创建一个继承自此的视图模型:

public class RandomViewModel : BaseViewModel
{
    RandomViewModel()
    {
        //set page properties
    }
}

然后在服务层(最好)或控制器中(可能必须在那里执行,没有尝试过,所以无法确定)在构建模型时可以访问ReturnPage属性(在此例子我假设你在行动中这样做了:

public ActionResult RandomAction()
{
    RandomViewModel model = _serviceLayer.GetRandomViewModel();
    model.ReturnPage = this.HttpContext.Request.UrlReferrer;
    return View(model);  
}

然后在视图中你可以这样做:

<input type="button" value="Cancel" onclick="if (history.length == 0) { window.location='<%= Model.ReturnPage %>' } else {  history.back() }" />

这只是一种头脑风暴,但我认为它会起作用。我不确定的唯一一个大问题是你想要设置引用者值的地方。我也会尝试从元素中获取onclick事件,如果可以的话,将其设置在标题中。

希望这有帮助。