MVC3 Routing - маршруты, которые строятся друг на друге - PullRequest
0 голосов
/ 04 октября 2011

У меня есть настройка AREA в моем проекте. Мне нужно сделать маршруты для области прогрессивными, то есть маршрут будет строиться друг на друге.

Я смотрю на это как на список ссылок. Каждый узел в списке будет иметь ссылку на родителя. Как движение слева направо в списке он строит, а справа налево он удаляет.

В этом районе у меня есть компании, у которых есть контакты, и дочерние компании.

Например, у меня есть компании, которые будут иметь следующее:

 /Companies/list
  /Company/{Id}
  /Company/{id}/add
  /Company/{id}/edit
  /Company/{id}/delete

Для раздела контактов мне нужно создать следующие маршруты:

 /Company/{id}/contacts/list
 /Company/{id}/contact/{id}/add
 /Company/{id}/contact/{id}/edit
 /Company/{id}/contact/{id}/delete

Как мне убедиться, что / Company / {id} всегда находится в разделах "Контактная и дочерняя компания" на маршруте?

Я надеюсь, что разъяснил свой вопрос.

1 Ответ

2 голосов
/ 04 октября 2011

Субъективные общности (взять с щепоткой соли):

Во-первых, вы используете компанию (единственное число) для компаний, но затем вы используете контакты (множественное число) для контактов. Со структурной точки зрения в этом нет ничего плохого, но ваши пользователи будут вам благодарны, если вы согласны с множителями. Я бы использовал множественное число в обоих случаях, но это только мои предпочтения ... это больше похоже на английский.

Вы также используете нижний регистр для контактов, но верхний регистр для компании. Не выглядит профессионально.

Следующее, что сбивает с толку, заключается в том, что вы используете два параметра {id}, один для компаний, один для контактов. Я предполагаю, что это идентификаторы для компании и контактов соответственно. Но я в замешательстве, но, будучи человеком, я могу вывести контекст в отличие от компьютера. Так что вам лучше указать параметры в ваших маршрутах. То есть:

/Companies/{CompanyId}/Contacts/{ContactId}/[action]

Ответ на ваш вопрос с примером:

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

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

Вы можете жестко закодировать это в ссылку. Или, что более полезно, ваша регистрация маршрута была бы разработана, чтобы отлавливать запросы, которые сопоставляются с вашими подписями Action.

Например, у меня есть приложение электронного обучения с преподавателями, учениками, курсами и ступенями (т. Е. Ступени похожи на разделы курса, ученик последовательно продвигается по курсу)

Регистрация маршрута выглядит примерно так:

Регистрация маршрута или района:

context.MapRoute(
    "StepDisplay",
    "Course/{CourseId}/Step/{StepOrder}/Pupil/{PupilName}/{TutorName}",
    new { controller = "Course", action = "Display", TutorName = UrlParameter.Optional },
new[] { "ES.eLearningFE.Areas.Courses.Controllers" }
);

Этот маршрут получит запрос от следующей ссылки ActionLink:

ActionLink в представлении:

@Html.ActionLink(@StepTitle, MVC.Courses.Course.Actions.Display(Model.CourseId, step.StepOrder, Model.Pupil.UserName, tutorName))

Теперь мне просто нужно показать подпись действия Display:

CoursesController:

public virtual ActionResult Display(int CourseId, int StepOrder, string PupilName, string TutorName)

Здесь следует отметить несколько вещей:

  1. Что я могу позвонить по этому конкретному маршруту, дав пользователю ссылку для нажатия.

  2. Я создаю эту ссылку с помощью помощника Html.ActionLink

  3. Я использовал пакет nuget Дэвида Эббо для того, чтобы я мог указать вызываемое действие и его параметры. Под этим я подразумеваю указание параметра ActionResult помощника Html.ActionLink с помощью:

    MVC.Courses.Course.Actions.Display (Model.CourseId, step.StepOrder, Model.Pupil.UserName, tutorName)

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

Теперь вы можете понять, почему два разных параметра маршрута называются одинаково имя - плохая идея (во многом потому, что она не сработает).

Итак, посмотрите на ваши подписи действий и спроектируйте свои маршруты и ссылки действий, чтобы все сошлось воедино.

MVC не работает по волшебству !! (Хотя то, как он использует соглашения об именах, может заставить вас поверить в это)

...