У меня есть панель навигации, с несколькими ссылками, как это:
<a href="MyController/Browse/2">MenuItem1</a>
Этот запрос поразит мой метод действия:
public ActionResult Browse(int departmentId)
{
var complexVM = MyCache.GetComplexVM(departmentId);
return View(complexVM);
}
Этоmy ComplexVM
:
public class ComplexVM
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
}
MyCache
- это статический список отделов, который я храню в памяти, поэтому, когда пользователь вводит DepartmentId
, мне не нужно получать соответствующийDepartmentName
из БД.
Это работает нормально ... но было бы неплохо, если бы я мог как-то инициализировать ComplexVM
в пользовательском связывателе модели вместо инициализации его в контроллере ... так что я все ещеЯ хочу использовать ссылку (пункт меню), но на этот раз CustomModelBinder
привязывает мой параметр 2 к ComplexVM
: ему нужно найти название отдела с id = 2 из MyCache
и инициализировать ComplexVM
, тогда ComplexVM
будет передано этому методу действия:
public ActionResult Browse(ComplexVM complexVM)
{
return View(complexVM);
}
Я хочу нажать на вышеупомянутый контроллер, не выполняя постбэк, так как у меня много ссылок на пункты меню в моей навигационной панели... не уверен, возможно ли это?Или, если это даже хорошая идея?
Я видел эту ссылку , которая описывает, что я хочу ... но я не уверен, как будет работать маршрутизация ...т.е. маршрутизация id:2
=> ComplexVM
В качестве альтернативы можно было бы сделать это в RouteConfig
, что-то вроде этого:
routes.MapRoute(
name: "Browse",
url: "{controller}/Browse/{departmentId}",
// this does not compile, just want to explain what I want...
defaults: new { action = "Browse", new ComplexVM(departmentId) });