Бета-маршруты ASP.NET MVC, действия контроллера, параметры и ссылки ссылок ... все это вместе - PullRequest
1 голос
/ 22 ноября 2008

У меня возникли некоторые проблемы с ASP.NET MVC Beta, и идея сделать маршруты, действия контроллера, параметры этих действий контроллера и Html.ActionLinks все работают вместе. У меня есть приложение, над которым я работаю, где у меня есть объект модели с именем Plot и соответствующий PlotController. Когда пользователь создает новый объект Plot, генерируется понятное для URL имя (, т.е. ). Затем я хотел бы сгенерировать «Список» графиков, которые принадлежат пользователю, каждый из которых будет являться ссылкой, которая будет перемещать пользователя к просмотру деталей этого графика. Я хочу, чтобы URL этой ссылки выглядел примерно так: http://myapp.com/plot/my-plot-name. Я пытался добиться этого с помощью приведенного ниже кода, но, похоже, он не работает, и я не могу найти любые хорошие образцы, которые показывают, как заставить все это работать вместе.

Определение моего маршрута:

routes.MapRoute( "PlotByName", "plot/{name}", new { controller = "Plot", action = "ViewDetails" } );

My ControllerAction:

[Authorize]
public ActionResult ViewDetails( string plotName )
{
    ViewData["SelectedPlot"] = from p in CurrentUser.Plots where p.UrlFriendlyName == plotName select p;
    return View();
}

Что касается ActionLink, я не совсем уверен, как это будет выглядеть для создания соответствующего URL.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 22 ноября 2008

Ответ довольно прост: вы должны указать достаточно значений в «ActionLink», которые будут соответствовать вашему маршруту. Пример:

<%= Html.ActionLink("Click Here", "ViewDetails", "Plot", new { name="my-plot-name" }, null)%>

Если вы пропустите часть «name =» метода ActionLink, то RouteEngine не сочтет эту ссылку достаточно хорошей, чтобы «соответствовать» ... поэтому он перейдет на маршрут по умолчанию.

Приведенный выше код заставит URL выглядеть так, как вы хотите.

0 голосов
/ 22 ноября 2008

Как насчет этого исправления кода? (Обратите внимание на name = null , добавленный в конец 4-й строки ....)

routes.MapRoute( 
    "PlotByName", 
    "plot/{name}", 
    new { controller = "Plot", action = "ViewDetails", name = null }
);

и это должно быть переименовано .. (уведомление plotName переименовано в name )

public ActionResult ViewDetails(string name ) { ... }

это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...