2016-01-26 1 views
2

У меня есть такой URL:Создать URL-адрес во время выполнения с ASP.NET MVC контроллер/действие

www.test.com/MyAreaName/MyControllerName/MyAction?key1=value&key2=value 

Мне нужен способ, как:

string generatedUrlWithQueryParams = Url.Action<MyController>(x => x.MyAction(MyViewModel)); 

Мне нужно позвонить выше способом из .cs class NOT из файла html razor.

Как я могу это сделать? Я слышал о фьючерсах asp.net mvc, но я не могу найти подходящий метод или пространство имен для использования этого метода.

ответ

1

Если у вас есть в наличии (Requestона доступна в ваших действиях контроллера), вы можете использовать UrlHelper класс.

var urlBuilder = new UrlHelper(Request.RequestContext); 
var url = urlBuilder .Action("YourAction", new YourViewModel { Age = 44, Code = "Test"}); 

или

var url = urlBuilder .Action("YourAction", "YourController", 
              new YourViewModel { Age = 44, Code = "Test"}); 

YourViewModel Предполагая, что имеет Age и Code собственность, и вы должны их в качестве значений маршрута сгенерированной ссылке.

Если вы вызываете этот код из другого класса, вы можете передать RequestContext на ваш контроллер/действие.

+0

я генерировать URL в классе обслуживания, который не знает о MVC. «YourAction» жестко запрограммирован, я не хочу этого. – Pascal

+0

Как класс сервиса знает, какой метод действия использовать для генерации URL? – Shyju

+0

В настоящий момент шаблоны электронной почты получают введенный url. URL-адрес создается вручную ... не рефакторинг безопасен ;-) – Pascal

3

Вы ищете что-то вроде этого:

string url = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext);