Asp.net mvc 从共享页面返回调用页面

Asp.net mvc 从共享页面返回调用页面,asp.net-mvc,navigation,Asp.net Mvc,Navigation,我的ASP.NET MVC应用程序中有一个共享页面,可以从应用程序中的多个不同页面访问该页面。如果我希望用户在共享页面上完成业务后返回其原始页面,那么找出用户所在位置并告诉应用程序转到该位置的最佳方法是什么 请注意,我目前正在对共享页面上的“取消”按钮执行此操作,方法是告诉onclick使用页面历史记录: <input type="button" value="Cancel" onclick="if (history.length == 0) { window.location='<

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

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

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

但如果共享页面更新了原始页面上显示的数据,则此操作不适用于保存。

尝试使用:

System.Web.HttpContext.Current.Request.UrlReferrer

尝试使用:

System.Web.HttpContext.Current.Request.UrlReferrer

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

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

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

然后,在服务层(最好)或控制器中(可能必须在那里执行,尚未尝试此操作,因此无法确定),您在构建模型时可以访问ReturnPage属性(在本例中,我假设您在操作中执行此操作):

然后在视图中,您可以执行以下操作:

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

这只是一种头脑风暴,但我认为它会奏效。我不确定的唯一一个大问题是,您希望在哪里设置referer值。如果可以的话,我还将尝试从元素中取出onclick事件,并在标题中设置它


希望这能有所帮助。

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

然后,在服务层(最好)或控制器中(可能必须在那里执行,尚未尝试此操作,因此无法确定),您在构建模型时可以访问ReturnPage属性(在本例中,我假设您在操作中执行此操作):

然后在视图中,您可以执行以下操作:

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

这只是一种头脑风暴,但我认为它会奏效。我不确定的唯一一个大问题是,您希望在哪里设置referer值。如果可以的话,我还将尝试从元素中取出onclick事件,并在标题中设置它


希望这能有所帮助。

我不认为如果您必须返回多个步骤,即子页面重定向到一个新页面进行表单验证,或者有多个子页面可供浏览,那么这会起作用。您可以在首次加载页面时将其存储在会话中。我不认为如果您必须返回多个步骤,这会起作用,也就是说,子页面重定向到新页面进行表单验证,或者有多个子页面可供浏览。您可以在首次加载页面时将其存储在会话中。
<input type="button" value="Cancel" onclick="if (history.length == 0) { window.location='<%= Model.ReturnPage %>' } else {  history.back() }" />