сложность маршрутизации - PullRequest
0 голосов
/ 27 мая 2010

Часть моего приложения отображает ресурсы, хранящиеся в нескольких местах, на URL-адреса в Интернете, например:

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

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

В моем 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 / Детали? IssueId = 1504 & ProductID = 3625.

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

Ответы [ 2 ]

0 голосов
/ 27 мая 2010

Прежде всего вы не зарегистрировали маршрут. 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>

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

...