ASP.NET MVC Routes: как назвать действие чем-то совершенно отличным от URL - PullRequest
0 голосов
/ 02 ноября 2010

Это продолжение пары предыдущих вопросов, которые у меня были. У меня есть контроллер с именем UserController, который я хотел бы обрабатывать действия с двумя типами объектов: User и UserProfile. Среди других действий я бы хотел определить действие Edit для обоих этих объектов и внутри UserController. Это должны быть отдельные действия, и я не против назвать их EditUser и EditProfile в controller , но я бы предпочел, чтобы URL выглядел следующим образом:

http://www.example.com/User/Edit/{userID}

и

http://www.example.com/User/Profile/Edit/{userProfileID}

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

А для контекста, предыдущие вопросы здесь и здесь

Спасибо.

Ответы [ 3 ]

6 голосов
/ 02 ноября 2010

Просто предложение, но разве вы не можете сделать что-то подобное для сопоставления правильных маршрутов?

routes.MapRoute(
    "ProfileRoute", // Route name
    "User/Edit/{userProfileID}", // URL with parameters
    new { controller = "User", action = "EditUser" } // Parameter defaults
);

routes.MapRoute(
    "ProfileEditRouet", // Route name
    "User/Profile/Edit/{userProfileID}", // URL with parameters
    new { controller = "User", action = "Editprofile" } // Parameter defaults
);

EDIT: Затем в вашем контроллере создайте два отдельных метода: EditUser (guid userId) и Editprofile (guid userId)

4 голосов
/ 02 ноября 2010

Вы можете попробовать что-то вроде следующего: (не проверено)

routes.MapRoute(
    "EditUser",
    "User/Edit/{userID}", 
    new { controller = "User", action = "EditUser" });

routes.MapRoute(
    "EditProfile",
    "User/Profile/Edit/{userProfileID}",
    new { controller = "User", action = "EditProfile" });

EDIT:

Использование MvcContrib (доступно из http://mvccontrib.codeplex.com/), синтаксис немного яснее:

(using MvcContrib.Routing;)

MvcRoute
    .MappUrl("User/Edit/{userID}")
    .WithDefaults(new { controller = "User", action = "EditUser" })
    .AddWithName("EditUser", routes);

MvcRoute
    .MappUrl("User/Profile/Edit/{userProfileID}")
    .WithDefaults(new { controller = "User", action = "EditProfile" })
    .AddWithName("EditProfile", routes);
1 голос
/ 02 ноября 2010
using MvcContrib.Routing;

public class UserController : Controller
{
    [UrlRoute(Path = "User/Edit/{userID}")]
    public ActionResult UserEdit(int userID)
    { 

    }
}
...