2009-07-06 82 views
0

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

注意,我正在做这个共享页面上的取消按钮,告诉的onclick使用页面历史:

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

但如果共享页面的更新数据,这将不保存工作显示在原始页面上。

回答

1

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

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事件从元素中移出并将其设置在标题中。

希望这会有所帮助。