这样的问题是为什么我越来越多地考虑使用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