В настоящее время быстрый и грязный метод ускользает от меня ... поэтому я использую практический метод.
На концептуальном уровне «обратная способность» страницы должна определятьсястраница, на которой вы сейчас находитесь.Представление может вывести это (в большинстве случаев), если параметры, захваченные в контроллере, передаются ему через ViewModel.
Пример:
Посетив Foo
, я собираюсь Bar
, чтобы просмотреть некоторые вещи, и кнопка возврата должна вернуться к Foo
.
Контроллер
public ActionResult Foo(string fooId) // using a string for your Id, good idea; Encryption, even better.
{
FooModel model = new FooModel() { fooId = fooId }; // property is passed to the Model - important.
model.Fill();
return View("FooView", model);
}
public ActionResult Bar(string fooId, string barId)
{
BarModel model = new BarModel() { fooId = fooId; barId = barId };
model.Fill()
return View("BarView", model)
}
ViewModels
public class FooModel
{
public string fooId { get; set; }
public void Fill()
{
// Get info from Repository.
}
}
public class BarModel
{
public string fooId { get; set; }
public string barId { get; set; }
public void Fill()
{
// Get info from Repository.
}
}
Просмотр (частичный) // No pun intended... or maybe it was. :)
Ваш BarView теперь может интерпретировать свою модель там, где ему необходимовернуться к (используя fooId
).
На вашем BarView (используя синтаксис MVC2):
<a href="<%= string.Format("/Foo?fooId={0}", Model.fooId) %>">Back</a>
Вы также можете использовать Html.ActionLink.
В качестве альтернативы:
Вы можете наследовать ваши ViewModel от BaseViewModel, которая может иметь защищенное свойство returnURL
.Установите это там, где необходимо.
Пример:
На вашей ViewModel:
public class BarModel : BaseViewModel
{
public string fooId { get; set; }
public string barId { get; set; }
public void Fill()
{
returnURL = string.Format("/Foo?fooId={0}", fooId)
// Get info from Repository.
}
}
При просмотре:
<a href="<%=returnURL %>">Back</a>