0

Часть моих карт приложений ресурсы хранятся в нескольких местах на веб-URL, например:маршрутизации трудности

http://servername/Issue.aspx/Details?issueID=1504/productId=2345

Можно ли построить маршрут MVC, который соответствует это так, что я получаю путь в его полнота перешла в мой контроллер? Либо как одна строка, либо, возможно, как массив строк параметров.

В моей Global.aspx я имею routes.MapRoute( "Issue", "Issue/{Details}", new { controller = "Issue", action = "Details" }, new { issueId = @"\d+", productId = @"\d+" } );

Я попытался код

RouteValueDictionary parameters = new RouteValueDictionary { {"Controller", "Issue"},{ "action", "Details" }, { "issueId", Test.ID }, {"productId", Test.Project.ID} }; 
     VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, parameters); 
     var test = vpd.VirtualPath; 

тест значение

/Issue.aspx/Details?issueId=1504 & PRODUCTID = 3625.

Как сгенерировать URL-адреса с помощью ASP.NET Маршрутизация и отправьте ее пользователям, и они должны иметь возможность открыть страницу, нажав на сгенерированную ссылку. Однако здесь имя сервера не включено. Как я могу получить имя сервера со ссылкой как http://servername/Issue.aspx/Details?issueID=1504/productId=2345

ответ

0

Прежде всего, вы неправильно зарегистрировали маршрут. Issue/{Details} строит параметр с именем Details и дает значение, которое вы вводите после Issue/ в своем URL-адресе. Я предполагаю, что вы должны удалить фигурные скобки. В идеале, я думаю, вы должны написать что-то вроде этого:

routes.MapRoute( 
"Issue", //route name (optional) 
"Issue/Details/{issueId}/{productId}/", //format 
new { controller = "Issue", action = "Details", issueId=0, productId=0 }, //default values 
new { issueId = @"\d+", productId = @"\d+" } //validation 
); 

Если у вас есть маршрут установлен правильно, используйте это, чтобы создать ссылку на ваш взгляд

<%= Html.ActionLink("Click me", "MyAction", "MyController", Request.Url.Scheme, 
Request.Url.Host + (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port), "anchorName", new { param = "value" }, 
new { myattribute = "something" }) %> 

он будет генерировать что-то вроде этого

<a myattribute="something" 
href="https://www.example.com/MyController/MyAction?param=value#anchorName"> 
Click me</a> 

Я рекомендую this book, если вы хотите, чтобы лучше знать платформы ASP.NET MVC. Я прочитал его только на этой неделе, и я смог ответить на это.

+0

Спасибо, что ответили. Я не совсем понял это объяснение. Как я смогу создать URL-адрес и отправить ссылку по электронной почте, чтобы страница открывалась, когда пользователь нажимает на ссылку? – learning

+0

Как я уже сказал: 1. Определите маршрут правильно 2. Используйте HTML-помощник под названием ActionLink для создания ссылки Не имеет значения, что вы делаете с ViewResult. Вы можете вернуть его как HTML-страницу или отправить по электронной почте. Этот вопрос касается маршрутизации, а не того, как передавать почту или как извлекать HTML из представления и использовать его позже. Если вы ищете ответы на эти вопросы, создайте новый вопрос здесь или еще что-нибудь. Я не смогу ответить на них прямо сейчас. – AlexanderMP

+0

Я бы хотел иметь виртуальный путь. Как я могу найти жизненный путь? Я использовал VirtualPathUtility.ToAbsolute (HttpContext.Current.Request.ApplicationPath); но он возвращается "\". Я хочу создать что-то вроде http: // localhost: 4219/Issue.aspx/Details? IssueID = 1504. Я делаю это в своей модели, поэтому, я думаю, я не смогу использовать Actionlink? – learning

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