返回到共享页面的调用页面
问题描述:
我在我的ASP.NET MVC应用程序中有一个共享页面,可以从我的应用程序中的多个不同页面进行访问。如果我希望用户在共享页面上完成业务后返回到其原始页面,找出用户位置并告诉应用程序去那里的最佳方式是什么?返回到共享页面的调用页面
注意,我正在做这个共享页面上的取消按钮,告诉的onclick使用页面历史:
<input type="button" value="Cancel" onclick="if (history.length == 0) { window.location='<%=Url.Action("Index", "Home") %>' } else { history.back() }" />
但如果共享页面的更新数据,这将不保存工作显示在原始页面上。
答
两个我能想到的办法是调用页面的URL保存在一个隐藏的输入元素或作为当前页面的地址的说法。这两种方法都可以在刷新或导航的几个步骤中存在,您只需确保变量传递到下一页。
答
尝试使用:
System.Web.HttpContext.Current.Request.UrlReferrer
http://msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx
答
这样的问题是为什么我越来越多地考虑使用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事件从元素中移出并将其设置在标题中。
希望这会有所帮助。
我不这样做,这将工作,如果你不得不返回多个步骤,即子页面重定向到一个新的页面进行表单验证或有多个子页面浏览。 – 2009-07-06 16:49:54