我的ASP.NET MVC应用程序中有一个共享页面,可以从我的应用程序中的几个不同页面访问。如果我希望用户在共享页面上完成业务后返回原始页面,那么找出用户所在位置的最佳方法是什么,并告诉应用程序去那里?
请注意,我现在正在为共享页面上的“取消”按钮执行此操作,方法是告诉onclick使用页面历史记录:
<input type="button" value="Cancel" onclick="if (history.length == 0) { window.location='<%=Url.Action("Index", "Home") %>' } else { history.back() }" />
但如果共享页面更新原始页面上显示的数据,则无法保存。
答案 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事件,如果可以的话,将其设置在标题中。
希望这有帮助。