Такие проблемы, почему я все больше и больше рассматриваю использование класса BaseViewModel, чтобы наследовать все мои модели просмотра, чтобы хранить информацию, которая может быть полезной на любой заданной странице. В последнее время я пытаюсь найти полное определение класса, но для этих целей было бы неплохо иметь свойства follwing (выложили часть этого ответа на другой вопрос, я найду ссылку в бит):
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
}
}
Затем в слое обслуживания (предпочтительно) или в контроллере (возможно, придется делать это там, убежище 't пробовал это, поэтому не могу быть уверенным) у вас будет доступ к свойству 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() }" />
Это всего лишь своего рода мозговой штурм, но я думаю, что это будет работать. Единственная большая проблема, о которой я не уверен, - это то, где вы хотите установить значение referrer. Я также попытался бы получить это событие onclick из элемента и установить его в заголовке, если можно.
Надеюсь, это поможет.
Я этого не сделаю, если вам нужно вернуться более чем на один шаг, то есть подстраница перенаправляет на новую страницу для проверки формы или существует несколько вспомогательных страниц для навигации. –
вы можете сохранить его в сеансе при первой загрузке страницы. – Josh