routeValues с ViewModel

#asp.net-mvc-3 #model-view-controller #routedata

#asp.net-mvc-3 #model-view-controller #routedata

Вопрос:

У меня есть ViewModel, который представляет собой очень простой объект фильтра, подобный этому:

 public class FilterViewModel
{
    public String FilterTerm { get; set; }
    public String FilterProperty { get; set; }
}
  

то, что я надеялся сделать, это сделать ссылку маршрута с другой страницы на эту и передать мой FilterViewModel в создание URL-адреса маршрута в routeValues следующим образом:

 Url.RouteUrl("myRoute", new { filter = new FilterViewModel() { FilterProperty = "Product", FilterTerm = _detail.FilterTerm }})"
  

Итак, то, что отображается на другой стороне,

 http://theurl?filter=Fully.Qualified.Namespace.FilterViewModel
  

Я не знаю, чего я ожидал, возможно, что-то, что сериализуется в строку запроса следующим образом:

 http://theurl?filter=FilterProperty|Product,FilterTerm|ProductA
  

Есть ли способ сделать то, что я пытаюсь сделать из коробки? (или не из коробки)

Ответ №1:

Попробуйте так:

 Url.RouteUrl(
    "myRoute", 
    new { 
        FilterProperty = "Product", 
        FilterTerm = _detail.FilterTerm 
    }
)
  

Понятия не имею, как выглядит ваша конфигурация маршрутизации, но это может привести к чему-то среди строк http://theurl?FilterProperty=Productamp;FilterTerm=ProductA . Для чего-то более экзотического, такого как URL-адреса, которые вы указали в своем вопросе, вам придется написать пользовательские помощники. В этом нет ничего стандартного.

Комментарии:

1. Хорошо, потрясающе… Я слишком усложнял это… Это правильная реализация моей проблемы… Я думал, что мне придется имитировать эту структуру в параметрах метода контроллера… Но я этого не сделал, я сохранил параметр своего метода следующим образом: MyAction(FilterViewModel filter), и он привязан правильно… Спасибо за вашу помощь, иногда я зацикливаюсь на привязке модели.