2009-07-06 3 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-адрес страницы, вызывающей в скрытом входном элементе или в качестве аргумента в адрес текущей страницы. Оба из них выдержат обновления или несколько шагов навигации, вам просто нужно убедиться, что переменные переданы на следующую страницу.

2

попробовать с помощью:

System.Web.HttpContext.Current.Request.UrlReferrer 

http://msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx

+0

Я этого не сделаю, если вам нужно вернуться более чем на один шаг, то есть подстраница перенаправляет на новую страницу для проверки формы или существует несколько вспомогательных страниц для навигации. –

+0

вы можете сохранить его в сеансе при первой загрузке страницы. – Josh

0

Такие проблемы, почему я все больше и больше рассматриваю использование класса 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 из элемента и установить его в заголовке, если можно.

Надеюсь, это поможет.

Смежные вопросы